다음 시나리오가 있습니다.쓰기 끝이 이미 닫혀있는 파이프의 읽기 끝을 명시 적으로 닫아야합니까?
파이프를 만듭니다.
하위 프로세스를 포크합니다.
아이가 파이프 명시 적으로의 끝을 읽고 아무것도 닫지 않고 파이프와 출구의 쓰기 마지막에 기록 닫힙니다 (아이를 대신하여 열려있는 모든 파일/배관 기술자를 닫아야 종료, 나는 가정).
부모는 파이프 명시 적으로의 쓰기 끝을 닫고 NULL
fgets
fgets
까지 수익률을 사용하여 파이프의 읽기 끝에서 읽습니다. ie 그것은 완전하게 읽는다.
내 질문은 왜 부모가 파이프 읽기 끝내기를 명시 적으로 닫아야합니까? 전체 데이터가 읽기 끝에서 읽혀지면 시스템에서 파이프를 모두 삭제하는 것이 현명하지 않습니까?
부모가 명시 적으로 읽기 끝을 닫고 더 이상 파이프를 여는 동안 Too many file descriptors
오류가 발생합니다. 필자의 가정은 쓰기 끝이 닫히고 데이터가 읽기 끝에서 완전히 읽혀지면 시스템이 파이프를 자동으로 삭제한다는 것입니다. 당신이 파이프에서 두 번 기울어 질 수 없기 때문에!
데이터가 완전히 읽혀지고 쓰기 종료가 끝나면 시스템 뒤의 논리가 그 파이프를 삭제하지 않는 이유는 무엇입니까?
"파이프를 두 번 열지 마십시오."??? –
@KerrekSB 내가 말한 것은 동일한 파이프를 두 번 읽을 수 있지만 두 번째로 EOF가 올바르게 표시된다는 것입니다. –