问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

C语言中使用system()函数执行shell脚本并获取退出状态

创作时间:
作者:
@小白创作中心

C语言中使用system()函数执行shell脚本并获取退出状态

引用
CSDN
1.
https://blog.csdn.net/qq_37858386/article/details/141571053

在C语言编程中,system()函数是一个非常实用的工具,它允许我们在程序中执行shell命令或脚本。然而,system()函数的返回值并不直接对应shell脚本的退出状态码,而是包含了更多的信息。本文将详细介绍如何正确使用system()函数执行shell脚本,并获取其退出状态。

system()函数简介

system()函数用于执行一个shell命令或脚本。这个函数返回的是命令的退出状态信息的高16位,而低16位是shell进程的退出状态码。要获取实际的退出状态,你需要使用宏来解析这个返回值。需要注意的是,在shell脚本中不要使用负数作为退出状态码,例如exit -8,这会导致错误提示"illegal number: -8"。

使用示例

下面是一个使用system()函数执行shell脚本并获取其退出状态的示例代码:

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

int main() {
    int status;

    // 执行shell脚本
    status = system("sh your_script.sh");

    // 检查命令是否执行成功
    if (status == -1) {
        perror("system");
        return 1;
    }

    // 提取和检查退出状态
    if (WIFEXITED(status)) {
        int exit_status = WEXITSTATUS(status);
        printf("Script exited with status: %d\n", exit_status);
    } else {
        printf("Script did not exit normally\n");
    }

    return 0;
}

在这个示例中:

  • system("sh your_script.sh")用于执行名为your_script.sh的shell脚本。
  • WIFEXITED(status)用于检查shell脚本是否正常退出。
  • WEXITSTATUS(status)用于获取脚本的退出状态码。

实际应用

下面是上述代码的实际运行截图:

通过这个示例,我们可以看到如何在C语言程序中正确地执行shell脚本并处理其退出状态。这对于需要在程序中动态加载驱动模块(如WIFI驱动)等场景非常有用。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号