2009-03-27 36 views
7

Một chương trình như vậy có sử dụng một chức năng chờ đợi như thế này là một trong những điều này:Ý nghĩa của wait ((int *) 0)

#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

Nếu chỉ có mã mẫu có liên quan đến chủ đề. –

+0

@Sean - bạn có bỏ lỡ cuộc gọi fork() không? – tvanfosson

+0

Không. Tôi thấy nó. Vẫn không liên quan gì đến chủ đề. –

Trả lời

3

Câu trả lời của người đặt cược là chính xác. Mặc dù cần lưu ý rằng diễn viên là hoàn toàn không cần thiết vì theo tiêu chuẩn, 0 được sử dụng trong một bối cảnh con trỏ là con trỏ NULL.

11

Xem man wait(2).

wait((int *)0) gọi waitpid(-1, (int *)0, 0). Trang người dùng tuyên bố:

Nếu trạng thái không phải là NULL, hãy đợi() và waitpid() lưu trữ thông tin trạng thái trong int mà nó trỏ.

Ở đây, status là NULL (0). Do đó, cuộc gọi của bạn tới số wait đợi thay đổi trạng thái trong bất kỳ quy trình con nào và không trả lại trạng thái. Cuộc gọi chỉ kiểm tra xem liệu một sự thay đổi trạng thái có xảy ra đối với một tiến trình con cụ thể hay không (pid trong trường hợp của bạn).