성엽이
KKIMSSI
성엽이
전체 방문자
오늘
어제
  • 분류 전체보기 (454)
    • :) (2)
    • C프로그래밍이론 (9)
    • C++프로그래밍 (64)
      • STL (1)
    • C# (2)
    • Visual studio 10.0 (9)
    • AT91SAM7S256 (21)
    • 논리회로 (14)
    • AVR2560 (11)
    • TCPIP (16)
    • NetWork (4)
      • Ubuntu Linux (2)
    • Assembly (21)
    • UNIX 프로그래밍 (6)
    • RFID 분석 (1)
    • Win32 API (7)
    • Cortex-M3 (4)
    • Unity (91)
    • Flutter (9)
    • OwnProject (11)
      • It's mine (5)
      • 마인드스톰 실습 (1)
      • 보고서 자료 (2)
      • RPi B+ (2)
    • ETC (25)
      • 상식 (3)
    • MFC (40)
    • PostgeSQL (18)
    • 영상제어 (6)
      • VFW_영상처리 (1)
    • Python (0)
    • Java (30)
      • SpringBoot (2)
      • Javascript (1)
      • JSP (13)
      • Spring (8)
    • Oracle (4)
      • SQL (3)
    • HTML (6)
      • Thymeleaf (1)
      • CSS (1)
      • Bootstrap (3)
    • IDE (1)
      • VS Code (1)
    • Android (2)
    • Privacy Policy (0)
    • MYSQL (2)
      • MariaDB (2)
    • AWS (5)
    • 개인공부 (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록
  • 관리자
  • 글쓰기

공지사항

인기 글

태그

  • WINAPI
  • Boot Code 분석
  • MFC
  • ARM Reverse Engineering
  • 문자열 나누기

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
성엽이

KKIMSSI

UNIX 프로그래밍

2013.08.29_UNIX 프로그래밍_3장_파일 I/O

2013. 8. 29. 16:19

3장 파일 I/O 

- 파일 입/출력에 사용하는 함수 : open, read, write, lseek, close 

- 비버퍼링(unbuffered I/O)방식



 3.1 open 함수

 #include <fcntl.h>


 int open(const char *pathname, int oflag, ... /* mode_t mode */);


 반환값 : 성공 시 파일 서술자, 오류 시 -1

- 반드시 지정해야하는 상수

 O_RDONLY  : 읽기 전용으로 열기

 O_WRONLY : 쓰기 전용으로 열기

 O_RDWR     : 읽기 및 쓰기용으로 열기

 - 선택적 상수
 O_APPEND : 파일 기록 시 내용을 파일의 끝에 추가한다.
 O_CREAT   : 파일이 존재하지 않으면 새로 생성한다.
 O_EXCL     : O_CREAT 와 같이 지정하고, 파일이 이미 존재하는 경우에 오류가 발생 ( -1 반환 )

 O_TRUNC   : 이미 존재하는 파일을 읽기 및 쓰기 모드로 열었을 때, 파일의 크기를 0 으로 만들어 준다.( 내용을 다 지움 )

 O_NOCTTY : 해당 장치를 가리키는 경우 , 해당 장치를 제어 터미널로 배정하지 않도록 한다. 쉽게 말해 제어장치로 가는 길을 막음.

    /* 읽기/쓰기 모드로 모뎀 장치를 연다.(O_RDWR)

     데이터 전송 시에 <CTRL>-C 문자가 오면 프로그램이 종료되지 않도록

     하기 위해 controlling tty가 안되도록 한다.(O_NOCTTY) */

   if ((fd = open(MODEMDEVICE, O_RDWR)) > 0)// | O_NOCTTY );

   {

         printf("file descripter is %d ---\n\r", fd);

   }

 O_NONBLOCK : 블록 특수 파일 , 문자 특수 파일, 블로킹이 되는 I/O 작업들에 대해서 블로킹을 해제해준다.

 - 선택적 상수 ( 동기 입출력 옵션 )
 O_DSYNC : 연 파일의 기존 부분에 자료를 덮어 쓰는 경우 파일의 시간을 동기적으로 갱신되지 않는다.
 O_RSYNC : 원래 읽기영역은 동기화되어있지만, 읽기를 위해 메타데이타(access time)을 사전에 바꾸고 읽기를 시작한다.
 O_SYNC   : 항상 갱신된다.

[출처] O_NOCTTY - o



 3.2 close 함수 

  #include <unistd.h>

 

 int close(int filedes);


 반환값 : 성공 시 0 , 오류 시 -1 


 : 프로세스의 열린 파일들을 모두 자동으로 닫는다.


 

 3.3 lseek 함수

 #include <unistd.h>


 off_t lseek(int filedes, off_t offset, int whence);


 반환값 : 성공 시 새 파일 오프셋, 오류 시 -1

 whence 에 SEEK_SET 이면 시작으로 부터 떨어진 정도

 whence 에 SEEK_CUR 이면 현재 위치에서 offset 을 더한 값

 whence 에 SEEK_END 이면 끝에서 부터 떨어진 정도


※ I/O 의 효율성 : BUFFSIZE 의 크기를 다르게 해주었을 때, 입/출력 시에 속도의 차이가 났다. 책을 참고하여 최적의 BUFFSIZE 를 확인 후 사용하는 것이 좋겠다.


3.4 파일 공유 

 

 커널( : OS 라 보면됨 ) 은 모든 프로세스에 대한 정보를 가진 프로세스 테이블을 관리 함.

 위 그림을 보듯이 fd 0 ( 파일 입력 ) 을 했을 때, 파일 포인터를 이용해 파일테이블과 그 파일의 정보를 가지고있는 v노드테이블을 가리킨다.

 유사하게 fd 1 ( 파일 출력 ) 도 마찬가지다. CPU는 1:1 로 프로세스를 관리할 수 있기 때문에 프로세스 테이블 항목들로 나눠서 관리를 한다.

 

======  소스  ======

0829.c


apue.h


daemons_error.c


Dohe3.1.c


Dohe3.2.c


Dohe3.4.c


standard_error.c

==================


저작자표시 (새창열림)

'UNIX 프로그래밍' 카테고리의 다른 글

2013.09.10_UNIX_7.7(DLL)~setjmp,longjmp 함수  (0) 2013.09.10
2013.09.03_정리(수정중)  (0) 2013.09.04
2013.09.04_수정중_  (0) 2013.09.04
2013.09.02_4장 파일과 디렉터리  (0) 2013.09.02
2013.08.30_UNIX_파일I/O_연산 및 함수  (0) 2013.08.30
    'UNIX 프로그래밍' 카테고리의 다른 글
    • 2013.09.03_정리(수정중)
    • 2013.09.04_수정중_
    • 2013.09.02_4장 파일과 디렉터리
    • 2013.08.30_UNIX_파일I/O_연산 및 함수
    성엽이
    성엽이

    티스토리툴바