(1) 파일 컨트롤 함수
:  fcntl() 는  open으로 이미 열려있는 파일의 특성을 변경하기 위해 사용한다.

○ 함수원형

#include <fcntl.h>

int fcntl(int fd, int cmd, int arg);


- fd : 제어 할 파일의 파일 기술자
- cmd : 파일 기술자에 대한 특성을 제어하기 위한 매개변수
- arg : cmd에 의해 결정되는 선택적(optional)인 값

○ 반환 값
- 성공시 : cmd에 따라 다른 값을 가진다.
- 실패시 : -1


(2) cmd 매개변수

○ F_DUPED
: 기존 파일 기술자를 복사하기 위해 사용된다. arg에 복제할 fd 값을 넘겨주고, 성공시 복제한 새로운 fd를 반환한다. arg로 입력받은 fd값이 있다면, arg보다 큰 값 중 가장 작은 값으로 복제가 된다. (이 점이 dup2()함수와 다르다. dup2()함수는 지정한 fd로만 복제가 된다.)

○ F_GETFD
: 기존 파일 기술자의 flags를 조회하기 위해 사용된다. 현재는 FD_CLOEXEC 플래그 하나만 반환한다. FD_CLOEXEC 플래그는 하나의 프로세스에서 새로운 프로세스를 실행시킬 때 열려있는 fd 를 그대로 넘겨준다. 새로운 프로세스에 열린 fd 값을 상속시키는 것이 디폴트로 FD_CLOEXEC 플래그를 해제하는 것이고, 0 으로 사용할 수도 있다. 반대로 새로운 프로세스에 열린 fd 값을 상속시키지 않게 하는 것은 FD_CLOEXEC 플래그를 설정하는 것이고, 1로 사용할 수도 있다.

○ F_SETFD
: fd 에 FD_CLOEXEC 플래그를 설정할때 사용된다. 설정할 새로운 플래그 값은 세번재 인수 arg에 지정한다.

○ F_GETFL
: 파일 상태 flags 를 조회할때 사용된다. open() 함수 호출 시 설정한 플래그 값들을 반환해준다. open() 함수 관련 포스팅에서 알아봤었지만 O_RDONLY, O_WRONLY, O_RDWR 는 서로 상호배타적으로 하나의 파일에서는 이 중 하나의 플래그만 가질 수 있다. 따라서 O_ACCMODE 를 이용해서 어떤 플래그를 가지고 있는지 확인해야 한다.

○ F_SETFL
: 파일 상태 flags 를 설정할때 사용된다. 세 번째 인수 arg에 파일 상태 플래그를 설정한다. 변경할 수 있는 플래그들은 O_APPEND, O_NONBLOCK, O_SYNC, O_DSYNC, O_RSYNC, O_FSYNC, O_ASYNC 뿐이다.


※ 참고자료: http://neakoo35.blog.me/30131475424 
by 민트앤라떼 2012. 5. 15. 16:49