前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux中system函数返回值详解

Linux中system函数返回值详解

作者头像
程序手艺人
发布2019-02-21 16:21:23
10.5K0
发布2019-02-21 16:21:23
举报
文章被收录于专栏:程序手艺人程序手艺人

描述

system()库函数使用fork(2)创建一个子进程,该子进程使用execl(3)执行指定的shell命令,

execl("/bin/sh", “sh”, “-c”, command, (char *) 0);

头文件

代码语言:javascript
复制
system - execute a shell command
#include <stdlib.h>
int system(const char *command);

返回值

  • 如果子进程无法创建,或者其状态不能被检索,则返回值为-1;
  • 如果在子进程中不能执行一个shell,或shell未正常的结束,返回值被写入到status的低8~15比特位中;一般为127值
  • 如果所有系统调用都成功, 将shell返回值填到status的低8~15比特位中
系统宏
  • 系统中提供了两个宏WIFEXITED(status)、WEXITSTATUS(status)判断shell的返回值
  • WIFEXITED(status) 用来指出子进程是否为正常退出的,如果是,它会返回一个非零值
  • WEXITSTATUS(status) 用来获取返回值status的低8~15数据

有了这两个宏代码就简介很多, 总结一下,system的返回值需要通过以下三个步骤确定

  • 首先判断子进程是否成功, status != -1;
  • 判断子进程是否正常退出, WIFEXITED(status)是否非零;
  • 子进程的返回值, WEXITSTATUS(status) == 0 ;
代码语言:javascript
复制
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int main()
{
	pid_t status; 
	status = system("./test.sh");
	printf("exit status value = [0x%x]\n", status);
	if (WIFEXITED(status))
	{
		if (0 == WEXITSTATUS(status))
		{
			printf("run sucess\n");
		}
		else
		{
			printf("run fail, exit code: %d\n", WEXITSTATUS(status));
		}
	}
	else
	{
		printf("exit status = [%d]\n", WEXITSTATUS(status));
	}
}

参考

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年12月18日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 描述
  • 头文件
  • 返回值
    • 系统宏
    • 参考
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档