1.system
system只是执行shell命令,返回int型的执行结果
int system(const char * string);
system()会调用fork()产生子进程,由子进程来调用/bin/sh -c string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略
而system函数对返回值的处理,涉及3个阶段:
#include<stdlib.h>
int main()
{
int status = system(“ls -l /etc/passwd”);
return 0;
}
2.popen
popen则可以利用管道获取shell命令输出的结果,返回一个FILE型的指针
FILE * popen( const char * command,const char * type);
popen()会调用fork()产生子进程,然后从子进程中调用/bin/sh -c来执行参数command的指令。参数type可使用“r”代表读取,“w”代表写入。依照此type值,popen()会建立管道连到子进程的标准输出设备或标准输入设备,然后返回一个文件指针。随后进程便可利用此文件指针来读取子进程的输出设备或是写入到子进程的标准输入设备中。此外,所有使用文件指针(FILE*)操作的函数也都可以使用,除了fclose()以外。
#include<stdio.h>
int main()
{
FILE * fp;
charbuffer[80];
fp=popen("cat /etc/passwd","r");
fgets(buffer,sizeof(buffer),fp);
printf(“%s”,buffer);
pclose(fp);
return 0;
}
原文:http://www.cnblogs.com/zjdbupt/p/5263065.html