一个通用的调用shell命令及打印退出状态的C语言实现
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <unistd.h>
4
#include <string.h>
5
#include <sys/wait.h>
6
7
8
void pr_exit(int status)
9
{
10
if(WIFEXITED(status))
11
printf("normal termination exit status=%d\n",WEXITSTATUS(status));
12
else if(WIFSIGNALED(status))
13
printf("abnormal termination,signal number=%d%s\n",WTERMSIG(status),
14
#ifdef WCOREDUMP
15
WCOREDUMP(status) ?" (core file gernerated) ":"");
16
#else
17
"");
18
#endif
19
else if(WIFSTOPPED(status))
20
printf("child stopped,signal number=%d\n",WSTOPSIG(status));
21
}
22
23
int main(int argc,char** argv)
24
{
25
int status;
26
char commd[255]="";
27
int i;
28
if(argc<2)
29
{
30
printf("command-line argument required\n");
31
return -1;
32
}
33
for(i=1;i<argc;i++)
34
{
35
strcat(commd,argv[i]);
36
commd[strlen(commd)]=' ';
37
}
38
if((status=system(commd))<0)
39
{
40
printf("Command error");
41
return -1;
42
}
43
44
pr_exit(status);
45
return 0;
46
}
47
#include <stdio.h>2
#include <stdlib.h>3
#include <unistd.h>4
#include <string.h>5
#include <sys/wait.h>6

7

8
void pr_exit(int status)9
{10
if(WIFEXITED(status))11
printf("normal termination exit status=%d\n",WEXITSTATUS(status));12
else if(WIFSIGNALED(status))13
printf("abnormal termination,signal number=%d%s\n",WTERMSIG(status),14
#ifdef WCOREDUMP15
WCOREDUMP(status) ?" (core file gernerated) ":"");16
#else17
"");18
#endif19
else if(WIFSTOPPED(status))20
printf("child stopped,signal number=%d\n",WSTOPSIG(status));21
}22

23
int main(int argc,char** argv)24
{25
int status;26
char commd[255]="";27
int i;28
if(argc<2)29
{30
printf("command-line argument required\n");31
return -1;32
}33
for(i=1;i<argc;i++)34
{35
strcat(commd,argv[i]);36
commd[strlen(commd)]=' ';37
}38
if((status=system(commd))<0)39
{40
printf("Command error");41
return -1;42
}43

44
pr_exit(status);45
return 0;46
}47

程序有两个功能:
1. 使用system函数调用shell命令,shell命令在启动程序参数中给出。
2. shell程序退出时可以获得其退出状态。
以上程序是根据APUE里的例子来实现的。可以参考8.6和8.13节。


浙公网安备 33010602011771号