Linux进程通信:管道要点

popen一般用于获取命令执行的输出,或者对命令进行输入(采用无名管道):

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


pipe用于无名管道:

int pipe(int pipefd[2]);


mkfifo用于有名管道:

int mkfifo(const char *pathname, mode_t mode);
-----------------------------------------------------------------------------------------------------------------------------------------

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
            
            多个进程可以写同一个管道。


本文转自:http://www.cppblog.com/iuranus/archive/2009/08/09/92717.html

你可能感兴趣的:(linux,File,command,ubuntu,buffer)