system()用于执行shell命令
头文件
#i nclude<stdlib.h>函数定义
int system(const char *command) ;函数说明
system()会调用fork()产生子进程,由子进程来调用/bin/sh-c command来执行参数command字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用
system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。
返回值
=-1:出现错误
=0:调用成功但是没有出现子进程
>0:成功退出的子进程的id
子进程的结束状态返回后存于status,底下有几个宏可判别结束情况
WIFEXITED(status)如果子进程正常结束则为非0值。
WEXITSTATUS(status)取得子进程exit()返回的结束代码,一般会先用WIFEXITED 来判断是否正常结束才能使用此宏。
WIFSIGNALED(status)如果子进程是因为信号而结束则此宏值为真
WTERMSIG(status)取得子进程因信号而中止的信号代码,一般会先用WIFSIGNALED 来判断后才使用此宏。
WIFSTOPPED(status)如果子进程处于暂停执行情况则此宏值为真。一般只有使用WUNTRACED 时才会有此情况。
WSTOPSIG(status)取得引发子进程暂停的信号代码
举个例子:
int status;
status= system("ls -l");
printf("WEXITSTATUS is %d ",WEXITSTATUS(status)); //获取shell命令执行完成的返回值
printf("WIFSIGNALED is %d ",WIFSIGNALED(status));
printf("WTERMSIG is %d ",WTERMSIG(status));
printf("WIFSTOPPED is %d ",WIFSTOPPED(status));
printf("WSTOPSIG is %d ",WSTOPSIG(status));