system()函数

来源:互联网 发布:沈天津seo诊断 编辑:程序博客网 时间:2024/05/22 13:02

【参开来源:http://bbs.chinaunix.net/thread-1036090-1-1.html】

函数原形是:
int   system(const   char   *command)
如果command被执行了,那么system的返回值就是command执行后的返回值,但是只有低8位返回了。如果想得到那个返回值可以调用WEXITSTATUS(status),其中status是system函数的返回值。

例如:

#include<stdio.h>
#include <stdlib.h>
#include <sys/wait.h>

int main(int argc,char **argv)
{
    const char* cmd ="exit -111";
    int status =system(cmd);

    printf("Returned code(WEXITSTATUS(status)):[%d]\n", WEXITSTATUS(status));

    printf("Returned code(status>>8):[%d]\n", status>>8);

    printf("Returned code(status):[%d]\n", status);
}

-111 只有低8位返回了,那么返回值是-111 + 256 = 145

我是在AIX操作系统下进行编译、运行的:

结果如下:

Return code(WEXITSTATUS(status)):[145]
Return code(status>>8):[145]
Return code(status):[37120]

不可以依赖低八位这个思路,除非不考虑移植性。建议使用提供的宏(在<sys/wait.h>)有

1、WIFEXITED(stat)   其中stat是waitpid()的返回值           非零 如果子程序正常退出

2、WEXITSTATUS(stat)                                                           子程序返回exit 值

3、WIFSIGNALED(stat)                                                           非零 如果子进程被一个信号结束

4、WTERMSIG(stat)                                                                 signal number that terminated child

5、WIFSTOPPED(stat)                                                             非零 如果子进程被停止

6、WSTOPSIG(stat)                                                                  停止子进程的signal number.

7、WIFCONTINUED(stat)                                                        非零 如果状态是继续运行的子进程

8、WCOREDUMP(stat)                                                            如果WIFSIGNALED(stat)非零,而且进程产生了一个core dump,那么这个也是非零。

还有其他,请参考http://pubs.opengroup.org/onlinepubs/007904975/basedefs/sys/wait.h.html