现在的位置: 首页 > 综合 > 正文

流管道

2017年12月26日 ⁄ 综合 ⁄ 共 819字 ⁄ 字号 评论关闭
标准流管道

与linux中文件操作有文件流的标准I/O一样,管道的操作也支持基于文件流的模式。接口函数如下:

库函数:popen();

原型:FILE *open (char *command,char *type);

返回值:如果成功,返回一个新的文件流。如果无法创建进程或者管道,返回NULL。管道中数据流的方向是由第二个参数type控制的。此参数可以是r或者w,分别代表读或写。但不能同时为读和写。在Linux 系统下,管道将会以参数type中第一个字符代表的方式打开。所以,如果你在参数type中写入rw,管道将会以读的方式打开。
使用popen()创建的管道必须使用pclose()关闭。其实,popen/pclose和标准文件输入/输出流中的fopen()/fclose()十分相似。

库函数:pclose();

原型:int pclose(FILE *stream);

返回值:返回系统调用wait4()的状态。

如果stream无效,或者系统调用wait4()失败,则返回-1。注意此库函数等待管道进程运行结束,然后关闭文件流。库函数pclose()在使用popen()创建的进程上执行wait4()函数,它将破坏管道和文件系统。

#include <stdio.h>

#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>

#define BUFSIZE 1024

int main()
{
    FILE *fp;
    char *cmd = "ps -ef";
    char buf[BUFSIZE];
    buf[BUFSIZE]    = '\0';
    if ((fp=popen(cmd, "r"))==NULL)
        perror("popen");
    while((fgets(buf, BUFSIZE, fp)) != NULL)
        printf("%s", buf);
    pclose(fp);
    exit(0);
    return 0;
}

【上篇】
【下篇】

抱歉!评论已关闭.