1. [UNIX/Linux, C언어] 저수준 파일 입출력 함수
※ 대부분의 파일 입출력을 5개 함수만으로 수행 가능 ☞ 시스템호출 참조
- open(), read(), write(), lseek(), close()
ㅇ fd = int open(const char *path, int oflag, [mode_t mode]);
- 헤더 파일 : 'sys/types', 'sys/stat.h', 'fcntl.h'
- 의미
. 지정 경로(path)에 파일 생성 또는 기존 파일을 오픈하고,
. 파일 접근을 위한 파일기술자를 반환 함
- 결과 리턴 : 성공시 파일기술자(번호,fd) 반환, 실패시 -1 반환
- oflag 플래그 : 읽기 쓰기 등 사용 목적에 대한 지정
. O_RDONLY : 읽기 전용으로 파일 오픈
. O_WRONLY : 쓰기 전용으로 파일 오픈
. O_RDWR : 읽기 쓰기 겸용으로 파일 오픈
. O_APPEND : 기존 파일 맨뒤에 덧붙임
. O_TRUNC : 기존 파일 내용 삭제 (파일 크기를 0 으로 만듬)
. O_CREAT : 필요하면 파일 생성
. O_EXCL : 파일 생성하나, 이미 존재하는 파일이면 에러 발생시킴
. O_NONBLOCK : 다른 프로세스가 접근중이라도, 읽기 모드를 허용
. O_SYNC : 물리적으로 쓰기 완료 전까지는 파일 쓰는 것을 금지함
. 위 플래그들을 비트 OR 연산자로 묶어 표현 가능
- mode 플래그 : 파일이 만들어질 경우에, 파일에 부여할 권한 지정
ㅇ numread = ssize_t read(int fd, void *buf, size_t nbytes);
- 헤더 파일 : 'sys/types', 'unistd.h'
- 성공적으로 열려진 파일 또는 소켓에 대해 파일기술자를 통해 파일에 접근하여,
규정한 바이트 단위 만큼 데이터들을 읽음
- 결과 리턴 : 성공시 실제 읽혀진 바이트 수, 실패시 -1, 파일끝을 만날때 0 을 반환
- 인자
. fd : 열려진 파일 또는 소켓에 대한 파일기술자(번호)
. buf : 파일 또는 소켓에서 읽은 데이터를 저장할 버퍼의 포인터(주소값)
. nbytes : 파일 또는 소켓에서 읽을 데이터의 바이트 단위 길이
ㅇ unmwritten = ssize_t write(int fd, const void *buf, size_t nbytes);
- 헤더 파일 : 'sys/types', 'unistd.h'
- 인자 : 위 read 함수와 유사
. fd : 열려진 파일 또는 소켓에 대한 파일기술자(번호)
. buf : 전송할 데이터가 저장된 버퍼의 포인터(주소값)
. nbytes : 전송할 데이터의 바이트 단위 길이
- 결과 리턴 : 실제로 쓰여진 바이트 수를 리턴
ㅇ status = int close(int fd);
- 헤더 파일 : 'unistd.h'
- 의미 : 모든 파일I/O를 마치고, 열려진 파일기술자 또는 소켓을 닫음
- 결과 리턴 : 성공시 0 반환, 실패시 -1 반환