fcntl 시스템호출은 이미 열려있는 파일의 특성 제어를 위해서 사용된다.

* fcntl(fd, F_SETFD, FD_CLOEXEC);
>> exec 등으로 process를 실행하면, 기존 process를 대치하게 되는데, 이 때 다른 설정이 없으면 기본적으로 기존에 열려있던 file descriptor는 열려있던 상태로 새로운 process로 상속된다.(open-on-exec, /proc/pid/fd에서 확인가능) 이를 방지하기 위해, FD_CLOEXEC를 지정하면(close-on-exec) exec로 기존 process가 대치될 경우, 지정된 file descriptor는 닫히게 된다.

* fcntl(fd, F_SETFL, O_NONBLOCK);
>> 기본적으로 입력(Input)은 block 모드(예를들면 STDIN으로 입력을 기다리게되면, 입력이 완료될 때까지 명령어 수행이 이루어 지지 않고 대기한다)로 동작하게 되는데, O_NONBLOCK을 설정하게 되면, 입력(또는 읽을 데이터)이 없을 경우 바로 -1을 반환한다.

'리눅스 & 안드로이드' 카테고리의 다른 글

Tips for kernel build  (0) 2011.02.09
[퍼온글] MTD Partition  (0) 2011.02.07
Android Self Q&A (업데이트 중...)  (0) 2011.02.07
Redirect stderr to stdout  (0) 2011.01.31
Android Gingerbread Porting 작업일지  (0) 2011.01.31
Posted by 세월의돌