0
파이프, 부모 프로세스 및 하위 프로세스가 있습니다. 부모는 파일에서 일부 데이터를 읽어서 파이프에 넣은 후 자식이 모든 데이터를 읽어야합니다. 내 문제는 이것입니다 : 부모님이 데이터를 읽고 자식이 파이프에서 데이터를받습니다. 그러나 끝까지 도달하면 프로세스가 종료되고 while 명령을 종료 한 후에는 결과가 출력되지 않습니다. ABC
을 출력은 다음과 같습니다 :파이프에서 읽을 때 프로세스가 종료됩니다.
int main(void)
{
int inputFile, channel[2], PID;
if(-1 == pipe(channel))
{
perror("Eroare");
return 0;
}
if(-1 == (inputFile = open("data.txt", O_RDONLY)))
{
perror("Error");
return 0;
}
if(-1 == (PID = fork()))
{
perror("Error");
return 0;
}
if(PID != 0)
{
char buffer;
if(-1 == close(channel[0]))
perror("Error");
while(1 == read(inputFile, &buffer, 1))
write(channel[1], &buffer, 1);
if(-1 == close(channel[1]))
perror("Error");
}
else
{
char buffer;
while(1 == read(channel[0], &buffer, 1))
printf("%c\n", buffer);
if(-1 == close(channel[0]))
perror("Error");
if(-1 == close(channel[1]))
perror("Error");
printf("Should output this");
}
return 0;
}
내 데이터 파일 문자열을 포함
+ 2A
B
C
여분의 빈 줄
아직도 그 파일 기술자에 대한 다른 작가가있는 경우
그러나 자식에게 파이프에 무엇인가를 쓰고, 자식에 대해 부모 'wait (NULL)'을 만든 후에, 부모가 파이프에서 자식이 쓴 것을 읽도록하려면 어떻게해야할까요? – Peter
자식이 파이프의 쓰기 측을 열어두기를 원하면 파이프가 닫힐 때까지 단순히 파이프에서 읽을 수 없습니다. 부모가 자녀에게 모든 데이터를 작성했음을 알리는 다른 메커니즘이 필요합니다. –