Вопрос
Одна из таких программ, которая использует подобную функцию ожидания, выглядит следующим образом:
#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;
}
Решение
ответ Стагера правильный.Хотя следует отметить, что приведение совершенно не требуется, поскольку по стандарту 0, используемый в контексте указателя, является NULL-указателем.
Другие советы
Видеть чувак, подожди(2).
wait((int *)0)
звонки waitpid(-1, (int *)0, 0)
.На странице руководства указано:
Если status не равен NULL, функции wait() и waitpid() сохраняют информацию о состоянии в int, на который она указывает.
Здесь, status
имеет значение НУЛЬ (0).Таким образом, ваш звонок wait
ожидает изменения состояния любого дочернего процесса и не возвращает статус.Вызов просто проверяет, произошло ли изменение состояния для конкретного дочернего процесса (pid
в твоем случае).