문제
이와 같이 대기 기능을 사용하는 그러한 프로그램 중 하나는 다음과 같습니다.
#include<stdio.h>
#include<stdlib.h>
int main()
{
int pid,fd[2]; int n; char line[20];
if(pipe(fd)<0) {
printf("Error creating pipe");
} else {
pid=fork();
if(pid<0) {
printf("Error while forking");
} else {
if(pid>0) {
close(fd[0]);
write(fd[1],"Hello\n",6);
while(wait((int *)0)!=pid);
} else {
close(fd[1]);
n=read(fd[0],line,20);
if(n<0)
printf("Error reading a file");
write(1,line,n);
}
}
}
return 0;
}
해결책
Stager의 대답이 맞습니다. 표준에 따르면 캐스트는 전적으로 불필요하다는 점에 주목해야하지만, 포인터 컨텍스트에서 사용되는 0은 널 포인터입니다.
다른 팁
보다 남자 대기 (2).
wait((int *)0)
전화 waitpid(-1, (int *)0, 0)
. Man Page는 다음과 같습니다.
상태가 null이 아닌 경우, wait () 및 waitpid ()가 가리키는 int의 상태 정보를 저장하십시오.
여기, status
NULL (0)입니다. 따라서, 당신의 전화 wait
아동 과정의 상태 변경을 기다리며 상태를 반환하지 않습니다. 전화는 단지 특정 아동 절차에 대해 주 변경이 발생했는지 확인합니다 (pid
귀하의 경우).
제휴하지 않습니다 StackOverflow