Linux学习笔记1-system函数介绍

system()函数的效率

system()函数会创建至少两个进程。一个用于运行shell,另外一个或多个则用于shell所执行的命令(执行每个命令都会调用一次exec())。

system()函数的安全

system()函数是一个不安全的函数,除了在设置用户ID和组ID时使用system()函数会出问题外,但这个安全问题可能在当前的linux版本中已经不存在了。
在SEI CERT中有提到,禁止使用system()函数,原因是system()函数对command不会做路径检查。
https://wiki.sei.cmu.edu/confluence/pages/viewpage.action?pageId=87152177

system()函数的返回值

#include <stdlib.h>
#include <stdio.h>

int main()
{
	int rc = 0;
	rc = system("ls");
	printf("cmd ls rc value is %d\n", rc);   //这里返回是0
	
	rc = system(NULL);
	printf("cmd NULL rc value is %d\n", rc);	//这里返回是1
	
	rc = system("lb");
	printf("cmd lb rc value is %d\n", rc);		//这里返回是32512
	
	rc = system("ls |grep XYZ");
	printf("cmd ls |grep XYZ rc value is %d\n", rc);		//这里返回是256

	rc = system("exit 127");
	printf("cmd exit 127 rc value is %d\n", rc);		//这里也是32512

	rc = system("sleep 100");
	printf("cmd sleep rc value is %d\n", rc);			//这里按ctrl+Z,并kill掉sleep进程后,会打印15
	
	return 0;
}

这里介绍一下最后一条命令,如果系统调用成功,system()会返回执行command的子shell的终止状态。shell的终止状态是其执行最后一条命令时的退出状态。如果命令被信号杀掉,shell会返回信号编号,这里是返回15,为SIGTERM信号。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值