[c] FD_CLOEXEC fcntl () 플래그는 무엇을합니까?

이렇게 :

if (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1) {
...

을 읽었지만 man fcntl그것이 무엇을하는지 알 수 없습니다.



답변

파일 설명자 대한 close-on-exec 플래그를 설정하여 exec-family 함수 중 하나가 성공할 때 파일 설명자가 자동으로 (그리고 원자 적으로) 닫히도록합니다 .

또한 반환 값을 테스트하여 작업이 실패했는지 확인합니다. 유효한 파일 설명자에서이 작업이 실패해야하는 조건이 없기 때문에 파일 설명자가 유효한 경우에는 쓸모가 없습니다.


답변

close()프로세스 또는 자식 이 함수 패밀리 fork()중 하나를 호출 할 때 자동으로 d 가되도록 파일 설명자를 표시합니다 exec*(). 이것은 예를 들어 실행되는 임의의 프로그램에 파일 설명자를 유출하는 것을 방지하는 데 유용합니다 system().


답변