进程间通信之命名管道

Posted Sawyer Ford

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程间通信之命名管道相关的知识,希望对你有一定的参考价值。

命名管道(FIFO)是进程间通信的一种方式。

API:

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

DEMO:

// 写进程
int main(int argc, char **argv) {
    char filename[] = "/tmp/my_fifo";
    if (mkfifo(filename, 0777) < 0) {
        perror("mkfifo error");
        exit(1);
    }
    int fd = open(filename, O_WRONLY);
    char buffer[128] = "hello world";
    write(fd, buffer, strlen(buffer));
    printf("write done\\n");
    return 0;
}

// 读进程
int main(int argc, char **argv) {
    char filename[] = "/tmp/my_fifo";
    int fd = open(filename, O_RDONLY);
    char buffer[128];
    int n = read(fd, buffer, 128);
    buffer[n] = \'\\0\';
    printf("input is : %s\\n", buffer);
    return 0;
}

两个地方需要注意:

1. mkfifo会在/tmp目录下创建文件my_fifo

2. 读进程open之前,写进程被阻塞

   (it has to be open at both ends simultaneously before you can proceed to do any input or output operations on it.)

 

管道相比,命名管道可用于任意两个进程间的通信。

以上是关于进程间通信之命名管道的主要内容,如果未能解决你的问题,请参考以下文章

简述Linux进程间通信之命名管道FIFO

进程间通信之命名管道

linux之进程间通信——管道

Linux进程间通信之管道(pipe)命名管道(FIFO)与信号(Signal)

进程间通信——命名管道

Linux系统编程——进程间通信:命名管道(FIFO)