Chinaunix首页 | 论坛 | 博客
  • 博客访问: 88213
  • 博文数量: 60
  • 博客积分: 4002
  • 博客等级: 中校
  • 技术积分: 645
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-17 18:11
文章分类

全部博文(60)

文章存档

2011年(60)

我的朋友

分类: LINUX

2011-01-05 18:58:12

    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) == -1 ) {
  18.         printf("pclose error\n");
  19.     }

  20.     return 0;
  21. }

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