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<stdlib.h>  
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<stdio.h>  
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 <unistd.h>    
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个函数名字不同, 而且他们用于接受的参数也不同。

猜你喜欢

转载自blog.csdn.net/u013162035/article/details/80623595