fcntl() 함수

System Program/I/O 2014. 2. 21. 10:34

1. Usage

 

fcntl() 시스템 호출은 열린 파일 상태 플래그 변경, 파일 디스크립터 복제 및 접근 모드 제어등 다양한 기능을 수행한다.  

 

2. 함수 정의

 

#include <fcntl.h>

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
: