분기된 하위 프로세스는 항상 상위 프로세스의 파일 ID와 동일한 파일 ID를 갖나요?

분기된 하위 프로세스는 항상 상위 프로세스의 파일 ID와 동일한 파일 ID를 갖나요?

순진한 질문일 수도 있지만 open부모 호출 시 파일 ID가 나에게 반환됩니다 4.

자식 프로세스가 다음을 수행한다는 것이 보장됩니까?언제나4파일 ID도 얻으시겠습니까?

답변1

성공적인 open호출은 사용되지 않은 파일 설명자로 가장 작은 숫자를 반환합니다.

따라서 open4가 반환되면 파일 설명자 0-3이 이미 사용 중임을 의미합니다. a가 fork자식 프로세스에 동일한 파일 설명자를 제공하므로 자식 프로세스도 fd 0-3을 사용 중이고 fd 4는 사용 가능하므로 opena 직후 부모 및 자식 프로세스에서 두 번의 성공적인 호출은 fork동일한 번호를 반환합니다. 하지만 나중에 부모나 자식이 파일을 열거나 닫으면 fork숫자가 달라질 수 있습니다 .

open일반적으로 타당한 이유가 있고 올바르게 예측할 수 있다고 확신하지 않는 한 호출된 fd를 예측하는 데 의존해서는 안 됩니다 .

답변2

응, 모두열려 있는분기하면 파일 ID가 하위 항목에 복사됩니다.

바라보다인간 포크

하위 프로세스는 상위 프로세스의 열린 파일 설명자 세트 사본을 상속합니다. 자식의 각 파일 설명자는 부모의 해당 파일 설명자와 동일한 열린 파일 설명(open(2) 참조)을 참조합니다. 이는 두 설명자가 열린 파일 상태 플래그, 현재 파일 오프셋 및 신호 구동 I/O 속성을 공유한다는 것을 의미합니다(fcntl(2)의 F_SETOWN 및 F_SETSIG 설명 참조).

관련 정보