system函数

函数作用

执行一个shell的命令

其实通过查看system函数的源码就会发现,system函数调用后会进行一次fork,然后就会在子进程中运行“execl("/bin/sh", "sh", "-c", command, (char *) 0);

而“sh -c XXX” 这个命令,其实就是相当于执行了 XXX 这个可执行文件,至于为什么不直接运行要加上sh -c,我也不是很清楚,可以参考这个博文更加了解 sh-c:

linux--sh -c_linux sh -c_星空黑夜的博客-CSDN博客

也就是说函数的作用就是执行command命令,底层就是调用execl函数,所以system函数可以看作一个对于execl函数的再封装,使得使用形式更加简单。

需要添加的库

#include 

函数原型

int system(const char *command);

函数参数

  • command:根据上面的说明,这里的command其实就是需要执行的命令字符串
  • 返回值:成功,则返回进程的状态值当sh不能执行时,返回127失败返回-1

实操演示

对于上节使用execl来修改配置文件的代码,将execl换成system函数

demo5.c:

#include 
#include 
#include 
#include 
#include 


int main(void)
{
	pid_t pid;
	pid_t fork_return;
	int cmd = 0;
	
	printf("please input a cmd number\n");
	scanf("%d",&cmd);
        if(cmd == 1){
		fork_return = fork();
		if(fork_return > 0){
			wait(NULL);
        	}else{
                	printf("This is the son JC,PID = %d\n",getpid());
                	if(system("/home/mjm/FILE/modify /home/mjm/FILE/test.config") == -1){
                        	printf("system failed!\n");
                        	perror("why");
                	}
                    printf("system finish\n");

        	}
	}

   	return 0;
}

运行代码: 

system函数_第1张图片

此时再打开test.config:

system函数_第2张图片 

可见,修改成功,所以使用system函数,方法更简单,同时实现了同样的效果

并且,和单独调用execl函数略有不同system函数在运行完之后会回到原程序,这也是为什么在原函数system调用后printf的“system finish” 也会被打印

你可能感兴趣的:(算法,Linux,系统编程,linux,c语言,开发语言)