fcntl() 함수
System Program/I/O 2014. 2. 21. 10:341. Usage
fcntl() 시스템 호출은 열린 파일 상태 플래그 변경, 파일 디스크립터 복제 및 접근 모드 제어등 다양한 기능을 수행한다.
2. 함수 정의
int fcntl(int fd, int cmd, ...);
성공할 경우 리턴값은 cmd에 따라 다르다. 에러는 '-1'을 리턴
3. 열린 파일 상태 검사 예시
int flags; flags = fcntl(fd, F_GETFL); if(flags == -1) perror("fcntl"); if(flags & O_SYNC) printf("writes are synchronized\n");
동기화된 쓰기용으로 파일이 열린 것인지를 검사한다. flags을 얻어오기 위해서 "F_GETFL"을 사용한다.
4. 접근 모드 상태 검사 예시
accessMode = flags & O_ACCMODE; if(accessMode == O_WRONLY || accessMode == O_RDWR) printf("file is writable\n");
접근 모드을 검사하는 것은 별도의 추가적으로 O_ACCMODE라는 flag에 대해서 비트 연산을 수행해야 한다.
5. 일반적인 사용 예시
int flags; flags = fcntl(fd, F_GETFL); if(flags == -1) perror("fcntl"); flags |= O_APPEND; if(fcntl(fd, F_SETFL, flags) == -1) perror("fcntl");
O_APPEND 상태 플래그를 추가하고자 할 경우, 기존에 값을 열어서 추가적으로 설정하는 것이 일반적인 방법이다.
설정 시에는 "F_SETFL"을 사용한다.
'System Program > I/O' 카테고리의 다른 글
고급 I/O 모델 : poll() 함수 (0) | 2014.03.12 |
---|---|
고급 I/O 모델 : select() 시스템 호출 (0) | 2014.03.01 |
access() 함수 (0) | 2014.02.26 |
stat() 관련 함수 (0) | 2014.02.26 |
파일 I/O: 범용 I/O 모델 (0) | 2013.10.10 |