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_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 로 프로세스를 관리할 수 있기 때문에 프로세스 테이블 항목들로 나눠서 관리를 한다. |
==================
'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 |