#6 저수준 파일 열기/닫기, 스트림 포지션
파일 열기
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
파라미터
- pathname : 파일 경로
- flags : 접근 모드를 포함한 여러 가지 플래그
- mode : 파일 생성 시 설정할 권한
반환 값
- 성공 시 열린 파일 디스크립터(fd)
- 실패 시 -1
fopen과 open 의 차이?
open() 함수와 fopen() 함수의 차이는 라이브러리에 있다.
open() 함수는 POSIX.1 규정에 준수하는 시스템 함수로, open() 함수는 커널수준에서 동작한다.(저수준 레벨)
fopen() 함수는 ANSI-C 규정에 준수하는 라이브러리 함수로, 컴파일러에 의해 표준 라이브러리를 사용하여 동작하므로 어플리케이션 수준에서 동작한다.
파일 열기 - 플래그
파일 열기 - 권한
ex) S_IRWXU : S_I 는고정이고, Read Write eXecution 을 User에게 -> S_IRWXU 이런식으로 해석 할 수 있다.
숫자를 이용해서도 설정 할 수 있다! -> 622 --> 유저에겐 읽기,쓰기권한, 그룹에겐 쓰기권한, other에겐 쓰기권한을
Value값을 이용해서 편히 설정 할 수 있다.
파일 닫기
int close(int fd);
파라미터
- fd : 파일 디스크립터
반환 값
- 성공 시 0
- 실패 시 -1
파일 포지션 - offset 설정
off_t lseek(int fd, off_t offset, int whence);
파라미터
- fd : 파일 디스크립터
- offset : 오프셋 값(양수/음수 모두 가능)
- whence : 오프셋의 기준
- SEEK_SET : 파일의 시작 기준
- SEEK_END : 파일의 끝 기준
- SEEK_CUR : 현재 파일 포지션의 기준
반환 값
- 성공시 완료 후 파일 포지션(offset값)
- 실패시 -1
파일 포지션 - 현재 offset 가져오기
저수준레벨 에서는 ftell() 과 같은 API가 없다.
하지만, 아래와 같이 현재 오프셋을 가져올 수 있다.
cur_offset = lseek(fd, 0, SEEK_CUR);