파일 읽고 쓰는 방법
저수준 파일 입출력
- 리눅스 커널의 시스템 호출을 이용해 파일 입출력을 수행
- 시스템 호출을 이용하므로 파일에 좀 더 빠르게 접근할 수 있는 장점
- 또한 바이트 단위로 파일의 내용을 다루므로 일반 파일뿐만 아니라 특수 파일도 읽고 쓸 수 있음
- 바이트 단위로만 입출력을 수행 가능 하므로 응용프로그램 작성시 다른 추가기능을 함수로 추가 구현 해야함
- 열린 파일을 참조할 때 파일 기술자 사용

파일 기술자
- 0번 : 표준 입력
- 1번 : 표준 출력
- 2번 : 표준 오류 출력
파일 열기 open()
int open(const char *pathname, int flags, mode_t mode);
int open(const char *pathname, int flags);
pathname
: 열려는 파일이 있는 경로
flags
: 파일 상태 플래그
mode
: 접근 권한

플래그 지정

파일 생성 creat()
int creat(const char *pathname, mode_t mode);
pathname
: 파일을 생성할 경로
mode
: 접근 권한
파일 읽기 read()
ssize_t read(int fd, void *fd, size_t count);
fd
: 파일 기술자
buf
: 파일에 기록할 데이터를 저장한 메모리 영역
count
: buf의 크기 (기록할 데이터의 크기)
파일 쓰기 write()
ssize_t write(int fd, const void *buf, size_t count);
fd
: 파일 기술자
buf
: 파일에 기록할 데이터를 저장한 메모리 영역
count
: buf의 크기
파일 오프셋 위치 지정 lseek()
off_t lseek(int fd, off_t offset, int whence);
fd
: 파일 기술자
offset
: 이동할 오프셋 위치
whence
: 오프셋의 기준 위치

파일 입출력 상수 O_APPEND
- open이 성공하면 파일의 마지막 바이트 바로 뒤에 위치
- 그 이후의 write는 전부 파일의 끝에 자료를 추가하게 됨
- 파일의 끝에 자료를 추가하는 방법
open("filename", O_WRONLY|O_APPEND);
write(fd, buf, BUFSIZE);