我有一个使用popen
and的程序pclose
:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/wait.h>
int main(void)
{
FILE *fp = NULL;
int ret_val = 0;
fp = popen("ls *", "r");
if (NULL == fp)
{
printf("popen error\n");
return 1;
}
ret_val = pclose(fp);
if (-1 == ret_val)
{
printf("pclose error\n");
return 1;
}
else
{
printf("%d,%d,%d\n",ret_val, WIFEXITED(ret_val), WEXITSTATUS(ret_val));
}
return 0;
}
程序的输出是:
./test
Broken Pipe
36096,1,141
我的问题是:
- 为什么会有“断管”?
- 为什么退出状态码是 141?我认为“ls *”执行成功,因此退出状态应该为 0。