《Linux杂记》Linux中C语言中执行shell语句

C程序调用shell脚本共有三种法子 :system()、popen()、exec系列数call_exec1.c
system() 不用你自己去产生进程,它已经封装了,直接加入自己的命令。
exec 需要你自己 fork 进程,然后exec 自己的命令。
popen() 也可以实现执行你的命令,比system 开销小。

方法一:system()的使用
system命令以其简略高效的作用得到很很广泛的利用 ,下面是一函数原型。
int system(const char *command);
我在/home/farsight新建一个test.sh文件如下:

#!/bin/bash  
echo $HOME  
echo "the is test!"

test.c文件如下:

#include  
int   main()  
{  
	system("bash /home/farsight/test.sh");
	//system("/home/farsight/test.sh");//【另一种方法】
	return 0;    
}

执行如下命令来编译:

gcc test.c -o test  

测试命令:

./test

结果如下:

the is test!

方法二:popen()使用

FILE *popen(const char *command, const char *type);  
int pclose(FILE *stream);

其他不用改变我们直接修改test.c文件:

#include  
int  main()  
{  	
	char buffer[80];  
   	FILE  *fp=popen("bash /home/farsight/test.sh","r");  
    
	fgets(buffer,sizeof(buffer),fp);  
	printf("%s",buffer);  
	pclose(fp);  
	return 0;  
}

方法三:exec函数簇

需要注意的是exec并不是1个函数, 其实它只是一组函数的统称, 它包括下面6个函数:

#include     
int execl(const char *path, const char *arg, ...);    
int execlp(const char *file, const char *arg, ...);    
int execle(const char *path, const char *arg, ..., char *const envp[]);    
int execv(const char *path, char *const argv[]);    
int execvp(const char *file, char *const argv[]);    
int execve(const char *path, char *const argv[], char *const envp[];   

可以见到这6个函数名字不同, 而且他们用于接受的参数也不同。

你可能感兴趣的:(《Linux杂记》Linux中C语言中执行shell语句)