当前位置: 技术问答>linux和unix
关于waitpid函数的一个问题
来源: 互联网 发布时间:2016-08-28
本文导语: 对已以下程序(为了方便各位阅读,我标了行号)第30行“b = waitpid(result,NULL,WNOHANG);”调用waitpid函数的时候,如果第二个参数用status时程序就发出 “waitpid_test.c:30: warning: passing argument 2 of ‘waitpid’ makes pointer ...
对已以下程序(为了方便各位阅读,我标了行号)第30行“b = waitpid(result,NULL,WNOHANG);”调用waitpid函数的时候,如果第二个参数用status时程序就发出
“waitpid_test.c:30: warning: passing argument 2 of ‘waitpid’ makes pointer from integer without a cast
/usr/include/sys/wait.h:139: note: expected ‘int *’ but argument is of type ‘int’”
的警告,但用NULL的时候就正常,为什么?麻烦各位了!
1 /*waitpid_test.c程序:等待子进程结束,每隔一秒打印一行文字*/
2
3 #include /*文件预处理,包含基本输入输出库*/
4 #include /*文件预处理,包含exit函数库*/
5 #include /*文件预处理,包含waitpid函数库*/
6 #include /*文件预处理,包含waitpid函数库*/
7 #include /*文件预处理,包含fork、sleep函数库*/
8
9 int main()
10 {
11 pid_t result,b;
12 int status,i;
13
14 result = fork(); /*调用fork函数,返回值存放在result变量中*/
15 if (result == -1) /*通过result判断fork函数的返回值情况,这儿先进行出错处理*/
16 {
17 perror("调用失败!");
18 exit(0);
19 }
20 else if (result == 0) /*创建子进程*/
21 {
22 printf("这是子进程,进程号(PID)是:%dn",getpid());
23 sleep(10);
24 exit(0);
25 }
26 else
27 {
28 do
29 {
30 b = waitpid(result,NULL,WNOHANG);
31 i = WEXITSTATUS(status);
32 if (b == 0)
33 {
34 printf("已等待了一秒!!n");
35 sleep(1);
36 }
37 }
38 while (b == 0);
39 if (b == result)
40 printf("等待的进程号(PID)是:%dn,退出的状态是:%dn",result,i);
41 }
42 }
“waitpid_test.c:30: warning: passing argument 2 of ‘waitpid’ makes pointer from integer without a cast
/usr/include/sys/wait.h:139: note: expected ‘int *’ but argument is of type ‘int’”
的警告,但用NULL的时候就正常,为什么?麻烦各位了!
1 /*waitpid_test.c程序:等待子进程结束,每隔一秒打印一行文字*/
2
3 #include /*文件预处理,包含基本输入输出库*/
4 #include /*文件预处理,包含exit函数库*/
5 #include /*文件预处理,包含waitpid函数库*/
6 #include /*文件预处理,包含waitpid函数库*/
7 #include /*文件预处理,包含fork、sleep函数库*/
8
9 int main()
10 {
11 pid_t result,b;
12 int status,i;
13
14 result = fork(); /*调用fork函数,返回值存放在result变量中*/
15 if (result == -1) /*通过result判断fork函数的返回值情况,这儿先进行出错处理*/
16 {
17 perror("调用失败!");
18 exit(0);
19 }
20 else if (result == 0) /*创建子进程*/
21 {
22 printf("这是子进程,进程号(PID)是:%dn",getpid());
23 sleep(10);
24 exit(0);
25 }
26 else
27 {
28 do
29 {
30 b = waitpid(result,NULL,WNOHANG);
31 i = WEXITSTATUS(status);
32 if (b == 0)
33 {
34 printf("已等待了一秒!!n");
35 sleep(1);
36 }
37 }
38 while (b == 0);
39 if (b == result)
40 printf("等待的进程号(PID)是:%dn,退出的状态是:%dn",result,i);
41 }
42 }
|
函数原型: pid_t waitpid(pid_t pid, int *status, int options);
警告说的很清楚:第二个参数应该是int*,而status是int,类型不匹配。
NULL本身就是指针,可以直接转换。
警告说的很清楚:第二个参数应该是int*,而status是int,类型不匹配。
NULL本身就是指针,可以直接转换。
|
同上所诉
|
如2楼,参数类型不匹配