![분기된 하위 프로세스는 항상 상위 프로세스의 파일 ID와 동일한 파일 ID를 갖나요?](https://linux55.com/image/143337/%EB%B6%84%EA%B8%B0%EB%90%9C%20%ED%95%98%EC%9C%84%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EB%8A%94%20%ED%95%AD%EC%83%81%20%EC%83%81%EC%9C%84%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%9D%98%20%ED%8C%8C%EC%9D%BC%20ID%EC%99%80%20%EB%8F%99%EC%9D%BC%ED%95%9C%20%ED%8C%8C%EC%9D%BC%20ID%EB%A5%BC%20%EA%B0%96%EB%82%98%EC%9A%94%3F.png)
순진한 질문일 수도 있지만 open
부모 호출 시 파일 ID가 나에게 반환됩니다 4
.
자식 프로세스가 다음을 수행한다는 것이 보장됩니까?언제나4
파일 ID도 얻으시겠습니까?
답변1
성공적인 open
호출은 사용되지 않은 파일 설명자로 가장 작은 숫자를 반환합니다.
따라서 open
4가 반환되면 파일 설명자 0-3이 이미 사용 중임을 의미합니다. a가 fork
자식 프로세스에 동일한 파일 설명자를 제공하므로 자식 프로세스도 fd 0-3을 사용 중이고 fd 4는 사용 가능하므로 open
a 직후 부모 및 자식 프로세스에서 두 번의 성공적인 호출은 fork
동일한 번호를 반환합니다. 하지만 나중에 부모나 자식이 파일을 열거나 닫으면 fork
숫자가 달라질 수 있습니다 .
open
일반적으로 타당한 이유가 있고 올바르게 예측할 수 있다고 확신하지 않는 한 호출된 fd를 예측하는 데 의존해서는 안 됩니다 .
답변2
응, 모두열려 있는분기하면 파일 ID가 하위 항목에 복사됩니다.
바라보다인간 포크
하위 프로세스는 상위 프로세스의 열린 파일 설명자 세트 사본을 상속합니다. 자식의 각 파일 설명자는 부모의 해당 파일 설명자와 동일한 열린 파일 설명(open(2) 참조)을 참조합니다. 이는 두 설명자가 열린 파일 상태 플래그, 현재 파일 오프셋 및 신호 구동 I/O 속성을 공유한다는 것을 의미합니다(fcntl(2)의 F_SETOWN 및 F_SETSIG 설명 참조).