Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1455427
  • 博文数量: 704
  • 博客积分: 10140
  • 博客等级: 上将
  • 技术积分: 6230
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-15 20:41
文章分类

全部博文(704)

文章存档

2013年(1)

2012年(16)

2011年(536)

2010年(151)

分类: C/C++

2011-01-10 08:35:07

 popen 和 pclose 库函数实现的操作:创建一个管道,调用fork产生一个子进程,关闭管道的不使用端,执行一个shell命令,然后等待命令终止。

    #include

    //成功返回文件指针,失败返回-1
    FILE *popen(const char *cmdstring, const char *type);

    //返回cmdstring的终止状态,出错返回-1
    int pclose(FILE *fp);

    popen先执行fork, 然后调用exec以执行cmdstring, 并且返回一个标准I/O文件指针。如果type是“r”,则文件指针链接到cmdstring的标准输出;如果type是“w”,则文件指针链接到cmdstring的标准输入。

    //成功返回buf, 否则返回NULL
    char *fgets(char *restrict buf, int n, FILE *restrict fp);

    //成功返回非负值,出错返回EOF
    int fputs(const char *restrict str, FILE *restrict fp);

例:

  1. #include <stdio.h>

  2. int
  3. main(int argc, char **argv)
  4. {
  5.     (void)argc;
  6.     (void)argv;

  7.     char buf[2048];
  8.     FILE *fp = popen("ls", "r");
  9.     if (NULL == fp) {
  10.         printf("ls error\n");
  11.     }

  12.     while (fgets(buf, 2048, fp) != NULL) {
  13.         if (fputs(buf, stdout) == EOF) {
  14.             printf("over\n");
  15.         }
  16.     }

  17.     if (pclose(fp) == -) {
  18.         printf("pclose error\n");
  19.     }

  20.     return 0;
  21. }
阅读(1127) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-03-08 13:59:21

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