저는 검색해서 아무 쓸모가 없으므로 마침내 도움을 요청했습니다. 저의 임무는 RedHat Linux에서 실행되는 C에서 두 개의 자식 프로세스를 생성하는데, 각 자식 프로세스는 임의의 양의 반복에 대한 문자를 파이프에 씁니다. 이 파이프는이를 생성 한 상위 프로세스와 공유됩니다. 아이들은 파이프에 글자를 쓸 때 파이프에서 읽습니다. 자식이 종료되고 파이프가 비어 있으면 부모 (주)가 종료 될 수 있습니다.2 명의 자녀가 파이프에 쓰고 부모가 C 파이프의 파이프에서 읽습니다.
여기에 제가 작성한 코드의 논리에 대한 빠른 & 더러운 예가 있습니다.
main()
{
//create pipe
fork(); //childA
//writes to pipe
fork(); //childB
//writes to pipe
//parent reading
while(condition) {
//read from pipe + print chars to terminal
}
}
이제 내 질문은 while 루프의 조건에 관한 것입니다. 아이들이 풀 파이프로 인해 글쓰기가 차단되었을 때 나는 읽을 필요가 있지만, 어떤 종류의 조건으로 이것을 할 수 있는지 알 수 없습니다. 어떤 도움이라도 절대적으로 훌륭합니다.
항상 "전체 파이프"상태에서 벗어날 수있는 유일한 방법입니다. 마지막 자식이 파이프를 닫으면 read는 -1을 반환합니다. – wildplasser
@wildplasser'read'는 파일의 끝에 0을, 에러시 -1을 반환합니다; 마지막 자식이 파이프를 닫고 읽을 데이터가 남아 있지 않으면 0을 반환합니다. 'fread'는 요청한 객체의 수 (또는 0)보다 작은 값을 반환하며, 파일의 끝이나 오류가 있는지를 결정하기 위해'feof'와'ferror'를 사용해야합니다. –