Let's go!!!!!
分类: LINUX
2012-12-09 16:30:36
FILE *popen ( char *command, char *type)
popen()函数首先调用pipe()函数建立一个管道,然后它用fork()函数建立一个子进程,
运行一个shell 环境,然后在这个shell 环境中运行"command"参数指定的程序。数据在管道
中流向由"type"参数控制。这个参数可以是"r"或者"w",分别代表读和写。需要注意的是,
"r"和"w"两个参数不能同时使用!
注意:管道是在 pclose() 的时候执行 popen() 创建的脚本命令!!!
#include
#include
#include
#define MAX 5
int main(void)
{
int cntr;
FILE *pipe_fp;
char *strings[MAX] = { "roy", "zixia", "gouki","supper", "mmwan"};
if (( pipe_fp = popen("sort -r", "w")) == NULL)
{
perror("popen");
exit(1);
}
for(cntr=0; cntr
fputs(strings[cntr], pipe_fp);
fputc('\n', pipe_fp);
}
pclose(pipe_fp);
return(0);
}
结果:
gouki
mmwan
roy
supper
zixia
#include
#include
#include
int main(void)
{
FILE *pipein_fp, *pipeout_fp;
char readbuf[50];
if (( pipein_fp = popen("ls", "r")) == NULL)
{
perror("popen");
exit(1);
}
if (( pipeout_fp = popen("sort", "w")) == NULL)
{
perror("popen");
exit(1);
}
while(fgets(readbuf, 80, pipein_fp))
fputs(readbuf, pipeout_fp);
pclose(pipein_fp);
pclose(pipeout_fp);
return(0);
}
结果:
a.out
cscope.in.out
cscope.out
cscope.po.out
library
pthread.c
tags
test
test.c
打印出程序所在目录中的所有文件。