攀升·Uranus


Something Different,Something New
数据加载中……

Linux进程通信:管道要点

        管道的认识从command1 | command2 认识开始,到现在做A2DP升华,写一些使用FIFO的要点下来。
        
      1   管道一般用于进程间通信,把一个进程的输出通过管道送给另一个进程。
      2   可以通过popen,pclose尝试实现command1 | command2 。
            File *popen(const char * command, const char *open_mode);
            open_mode: r or w
            File a =popen("uname -a", "r");
            fread(buffer, 1, BUFSIZE, a);
            printf("%s", buffer);
            >> Linux Ubuntu 8.09..................

      3   pipe创建管道
           #include <unistd.h>

           int pipe(int file_description[2]);
           pipe的参数是由两个文件描述符组成的数组。file_description[0] 用于读管道, file_description[1] 用来写管道。
       4   命名管道:mkfifo
            #include <sys/types.h>
            #include <sys/stat.h>
            int mkfifo(const char * filename, mode_t mode);
            mode: O_RDONLY, O_WRONLY, O_NONBLOCK.
            共四种组合:
            O_RDONLY:阻塞读方式打开,除非有进程以写方式打开,不然阻塞。
            O_RDONLY|O_NONBLOCK:  不论怎样,立即返回,总是成功
            O_WRONLY: 阻塞写方式打开,直到有人来读,不然阻塞
            O_WRONLY|O_NONBLOCK: 立即返回,但如果没人以读方式打开,返回-1错误
            FIFO SIZE:#include <limites.h>, PIPE_BUF, default 4096
            
            多个进程可以写同一个管道。

posted on 2009-08-09 17:24 攀升 阅读(1593) 评论(2)  编辑 收藏 引用 所属分类: Linux

评论

# re: Linux进程通信:管道要点  回复  更多评论   

2 可以通过popen,pclose尝试实现command1 | command2 。

这种方式很有建设性啊!
赞一个!
2009-08-10 13:17 | abettor

# re: Linux进程通信:管道要点  回复  更多评论   

@abettor

真的么?
2009-08-10 13:19 | 攀升

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理