Poen pclose创建和关闭无名管道
时间:2010-11-18 来源:unix_disciple
poen pclose创建和关闭无名管道
Linux下标准I/O函数库提供了poen函数,它创建了一个管道并启动另外一个进程,该进程或者从管道读出标准输入,或者从管道写入标准输出。
#include <stdio.h> FILE *poen(const char *command,const char *type); //返回:成功时为文件指针,出错时为NULL
int pclose(FILE *stream); //返回:成功时为shell的终止状态,出错时为-1
|
其中command是一个shell命令行,它是由shell程序处理的,poen在调用进程和所指定的命令之间创建一个管道,由open返回的值是一个标准I/O FILE指针,该指针或者用于输入,或者用于输出,具体取决于字符串type,如果type为r,那么调用进程读取command的标准输出。如果type为w,那么调用进程写到command的标准输入。pclose函数关闭由poen创建的标准I/O流stream,等待其中的命令终止,然后返回shell的终止状态。
Example:
popen.c
#include <stdio.h> #include <stdlib.h> #include <unistd.h>
int main() { FILE *fp_pipe; FILE *fp; char buff[1024];
fp_pipe = popen("ls -l","r"); fp = fopen("temp.txt","w+");
memset(buff,0,sizeof(buff)); fread(buff,sizeof(char),sizeof(buff),fp_pipe); fwrite(buff,sizeof(char),sizeof(buff),fp);
pclose(fp_pipe); fclose(fp); exit(0); } |
mark@ubuntu:~/popen$ ls Makefile popen popen.c mark@ubuntu:~/popen$ ./popen mark@ubuntu:~/popen$ ls Makefile popen popen.c temp.txt mark@ubuntu:~/popen$ cat temp.txt 总用量 16 -rw------- 1 mark mark 65 2010-11-18 01:09 Makefile -rwxr-xr-x 1 mark mark 7402 2010-11-18 02:06 popen -rw------- 1 mark mark 350 2010-11-18 01:13 popen.c -rw-r--r-- 1 mark mark 0 2010-11-18 02:06 temp.txt mark@ubuntu:~/popen$ |