管道和FIFO(二)

popen和pclose函数:

这两个函数是标准I/O库里的。

#include <stdio.h>

FILE *popen(const char *command, const char *type)

int pclose(FILE *stream)

描述:它创建另一个进程,在进程中执行command命令,然后根据type类型,

如果是“r”,那么调用进程读进command的标准输出。

如果是“w”,那么调用进程写到command的标准输入。

例子:

/*从标准输入读经一个文件名,随后构建一个命令,并把它传递给popen,
然后将这个命令的输出复制到标准输出上*/
//mainpopen.c
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
#define MAXLINE 1000

int main(int argc, char **argv)
{
    size_t n;
    char buff[MAXLINE], command[MAXLINE];
    FILE *fp;

    fgets(buff, MAXLINE, stdin);//从标准输入获取路径名
    n = strlen(buff);
    if (buff[n-1] == '\n')//剔除换行符
        n--;
    snprintf(command, sizeof(command), "cat %s", buff);//构建命令
    fp = popen(command, "r");//这个命令的输出将做为一个流输出出去
    
    while (fgets(buff, MAXLINE, fp) != NULL)//将这个输出流读进buff去
        fputs(buff, stdout);//复制到标准输出去。
    pclose(fp);
    exit(0);
}

你可能感兴趣的:(管道和FIFO(二))