Linux 管道的I/O

来源:互联网 发布:大米营销软件骗局 编辑:程序博客网 时间:2024/05/21 11:01

管道使用完毕后应该调用close关闭,一个管道包含两个描述符,所以调用两次。多进程环境下注意文件描述符的引用次数,到0才算停止。

管道编程的一半步骤是先创建一个管道,然后在创建一个进程,父子进程通过管道进行数据交换,为了方便起见Linux的标准I/O库提供了两个专用的I/O函数,popen和pclose

popen首先创建一个管道,然后调用fork创建一个子进程,在子进程通过exec系列的函数加载要执行的程序-------第一个参数。popen成功后返回一个FILE数据结构指针,结合第二

参数可以确定含义。

#include<stdio.h>#include<unistd.h>#include<stdlib.h>#include<wait.h>#include<errno.h>#include<signal.h>#include <setjmp.h>#include<string.h>#include<sys/types.h>#include<fcntl.h>#include<sys/stat.h>int main( void ){    FILE   *stream;//创建FILE指针变量    char   buf[1024];//文件缓冲区    memset( buf, '\0', sizeof(buf) );//清0    stream = popen( "wc -l", "w" );//子进程执行wc -l命令,输入来自stream    //在这里的就是统计输入了多少行数据,要求从键盘输入    for(;;)    {        memset(buf,0x00,sizeof(buf));//清空缓冲区        scanf("%s",buf);//键盘接受数据        if(strcmp(buf,"q") == 0)//是否为q        {            break;        }        fprintf(stream,"%s\n",buf);    }    pclose( stream );//关闭指针。完事后会输出wc命令统计的行数信息的..    return 0;}


0 0
原创粉丝点击