Chinaunix首页 | 论坛 | 博客
  • 博客访问: 397296
  • 博文数量: 115
  • 博客积分: 2501
  • 博客等级: 少校
  • 技术积分: 1009
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-23 17:05
文章分类

全部博文(115)

文章存档

2011年(2)

2010年(86)

2009年(27)

我的朋友

分类: LINUX

2010-11-18 18:17:24

poen pclose创建和关闭无名管道

Linux下标准I/O函数库提供了poen函数,它创建了一个管道并启动另外一个进程,该进程或者从管道读出标准输入,或者从管道写入标准输出。

#include

FILE *poen(const char *command,const char *type); 

//返回:成功时为文件指针,出错时为NULL

 

int pclose(FILE *stream);

//返回:成功时为shell的终止状态,出错时为-1

 

其中command是一个shell命令行,它是由shell程序处理的,poen在调用进程和所指定的命令之间创建一个管道,由open返回的值是一个标准I/O FILE指针,该指针或者用于输入,或者用于输出,具体取决于字符串type,如果typer,那么调用进程读取command的标准输出。如果typew,那么调用进程写到command的标准输入。pclose函数关闭由poen创建的标准I/Ostream,等待其中的命令终止,然后返回shell的终止状态。

 

Example

popen.c

#include

#include

#include

 

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$

 

阅读(2476) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-11-19 15:33:30

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com