2014-12-10 5 views
4

나는 waitpid() 함수 대신에 wait() 함수를 사용한다. 을 세 개의 인수로 사용하여 아래 코드를 구현하는 동안 waitpid() 함수와 함께 3 개의 인수를 사용했다. 제대로 작동합니다. 어떻게 작동하는지 모르겠습니다. 아무도 그것을 설명 할 수 있습니까 ??왜 wait() 함수가 더 많은 인수를 필요로합니까?

#include<stdio.h> 
    #include<stdlib.h> 
#include<unistd.h> 

main() 
{ 
    pid_t pid; 
    int p; 

    if((pid=fork())==0){ 
      printf("Child present\n"); 
      sleep(2); 
      printf("Child terminated\n"); 
      _exit(0); 
    } 
    wait(pid,&p,0);                       
    printf("parent terminated\n"); 
    return 0; 
} 

그러나 대기 기능에 대한 구문은 man 페이지 here 당으로

pid_t wait(int *status); 
+1

코드는 버그가 "대기". 버그를 수정하면 신비가 사라질 것입니다. –

답변

4

입니다, 당신은 내가보고 있지 않다 wait() [또는 waitpid()]를 사용하는 <sys/types.h><sys/wait.h> 헤더 파일을 포함해야 귀하의 코드입니다.

그것은 매우 가능성이 컴파일러는

  • 는 입력 인수의 수
  • 반환 정수를 수락하는 경우, 일부 implicit declarationwait()의 기능을 사용하는 것입니다.

는 상기 헤더 파일과 complie을 포함하는 경우, 컴파일러는 기능

너무 많은 인수에 관한 경고를 생산한다

+0

답변을 게시 한 후에 해당 헤더 파일을 포함하고 해당 코드를 실행하면 오류 또는 경고 메시지가 표시되지 않습니다. – Bhuvanesh

+4

@SouravGhosh - 'wait()'의 프로토 타입을 생략하지 않아도 될 이유가 없습니다 (포함하지 않음). '')는'아무 것도하지 않는 '코드를 생성합니다. 링커는'wait()'함수를 찾을 것이고 아마도 Bhuvanesh는 올바른 라이브러리 파일을 포함 시켜서 함수가 발견 될 수 있다고 생각할 것이다. 그러나 프로토 타입을 생략하면 함수가 완전히 잘못된 매개 변수 및 반환 형식으로 올바르게 호출 할 수 있습니다. – AAT

+0

@AAT 바로 그 부분을 제거했습니다. 내가 고쳐 주셔서 대단히 감사합니다. –

관련 문제