1、popen函数
popen()通过创建一个管道,调用 fork 产生一个子进程,执行一个 shell 以运行命令来开启一个进程。
这个进程必须由 pclose() 函数关闭,而不是 fclose() 函数。
#include <stdio.h>
FILE *popen(const char *command, const char *type);
int pclose(FILE *stream);
功能:执行shell命令,并读取此命令的返回值。
参数:command:一个指向以NULL结束的shell命令字符串的指针
type:只能是读或写("r"或"w")
返回:如果调用fork()或pipe()失败,或者不能分配内存将返回NULL,否则返回标准I/O流
2、system函数
system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程
#include <stdlib.h>
int system(const char *command);
函数:int system(const char *command)
功能:执行shell命令
参数:command:一个指向以NULL结束的shell命令字符串的指针
返回: -1 :fork()失败
127 :exec()失败
other:子shell的终止状态
3、例子
#include <stdio.h>
int main()
{
FILE *fp = NULL;
char buf[100] = {0};
fp = popen("cat /tmp/test", "r");
if(NULL == fp)
{
printf("popen() erro!!!");
return -1;
}
while(NULL != fgets(buf, sizeof(buf), fp))
{
printf("%s", buf);
}
pclose(fp);
return 0;
}
fp = popen("date > /tmp/test", "w");
fwrite(buf, 1, sizeof(buf), fp);