2014-12-10 10 views
4

Я попытался с функцией waitpid(), он принимает три аргумента, в то время как я реализую код ниже , у меня были некоторые ошибки, вместо функции waitpid() я использовал функцию wait() с тремя аргументами. он работает правильно, я не понимаю, как он работает. Любой может это объяснить ??Почему функция 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; 
} 

Но синтаксис для функции ожидания является

pid_t wait(int *status); 
+1

Ваш код содержит ошибку. Исправьте ошибку, и тайна исчезнет. –

ответ

4

Согласно справочной странице here, вам необходимо включить <sys/types.h> и <sys/wait.h> файлы заголовков использовать wait() [или waitpid()], которые я не вижу в вашем коде.

Это очень вероятно, что ваш компилятор использовал некоторые implicit declaration из wait() функции, которая, в случае,

  • принимать любое количество входных аргументов
  • возвращают целое.

Если включить вышеуказанные файлы заголовков и Скомпилируйте, компилятор должен производить предупреждения о

слишком много аргументов, чтобы работать «ждать»

+0

после того, как вы разместите ответ, я включил эти файлы заголовков и запустил этот код в это время, а также любые сообщения об ошибках или предупреждениях не отображаются – Bhuvanesh

+4

@SouravGhosh - нет оснований думать, что опустить прототип для 'wait()' (не включая '') приведет к коду, который 'ничего не выполняет'. Компилятор будет искать функцию 'wait()', и, предположительно, Bhuvanesh удалось включить правильный файл библиотеки, чтобы найти функцию. Но опускание прототипа позволяет вызывать функцию с полностью неправильными параметрами и возвращаемым типом, как вы правильно говорите. – AAT

+0

@AAT правый сэр, удален эта часть. Большое спасибо за то, что вы меня исправили. –

Смежные вопросы