Вопрос

Одна из таких программ, которая использует подобную функцию ожидания, выглядит следующим образом:

#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 в твоем случае).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top