C 프로그래밍 (Linux-UNIX-Programmierung, Jürgen Wolf 저)에 대한 (독문학) 책에서 영어로 번역 된 문장은 다음과 같을 것입니다. 나를) :C : dup 및 close-on-exec
어떤 경우에는 파일 설명자 [1]를 복제해야 할 수도 있습니다. 예를 들어 부모 프로세스가 자식 프로세스와 데이터를 교환하려고하고 자식 프로세스가
exec*()
[2]를 사용하여 새 프로세스로 겹쳐진 경우입니다. 이 경우,dup() or dup2()
이 없으면 exec-close 플래그가 설정됩니다 [3]. 이 플래그가 설정되면, 모든 파일 기술자는 (새로운 프로세스에 의해 겹쳐지기 때문에) 무효화됩니다. 즉, 더 이상 존재하지 않습니다 [4]. 따라서 부모 프로세스와 자식 프로세스 간의 통신은 중단된다 [5]. 반면에 파일 설명자를dup() or dup2()
으로 복제하면 exec-close 플래그가 삭제되고 새로 오버레이 된 프로세스가이 파일 설명자를 사용하여 [6] 통신 할 수 있습니다.
위의 단락에는 오해의 소지가있는 여러 진술 또는 오류가 포함되어 있다고 생각됩니다. dup()
또는 dup2()
를 사용하지 않고 근접에-간부 플래그를 설정해야하는 이유 문장에서
[3], 이해가 안 돼요?
아마도 그들은 호출자가 * close-on-exec * 플래그를 설정 한 디스크립터를 알지 못하는 라이브러리 함수에 대해 이야기하고있는 것이므로 최악의 경우를 가정해야합니다. – Barmar
또한 라이브러리는 호출자가 사용중인 파일 설명자의 상태를 변경하지 않아야합니다. – Barmar
@Barmar 그의 목적이 아니라면 ncurses, libcaca 등 – Stargateur