문제

이와 같이 대기 기능을 사용하는 그러한 프로그램 중 하나는 다음과 같습니다.

#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 귀하의 경우).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top