正确实现进程间通信 (IPC)

Posted

技术标签:

【中文标题】正确实现进程间通信 (IPC)【英文标题】:Proper implementation of an inter process communication (IPC) 【发布时间】:2015-01-29 12:31:17 【问题描述】:

以下是进程间通信的正确实现吗?

#include <stdio.h>
#include <fcntl.h>
#include <sys/poll.h>

int main(int argc, char** argv) 
    if (argc > 1) 
//Sending side
        struct stat buffer;
        if (stat("/tmp/PROCAtoPROCB", &buffer) != 0)
            mkfifo("/tmp/PROCAtoPROCB", (mode_t)0600);

        int fdFIFO = open("/tmp/PROCAtoPROCB", O_WRONLY | O_NONBLOCK);
        if (fdFIFO > 0) 
            write(fdFIFO, (void *)argv[1], sizeof(argv[1]));
            close(fdFIFO);
        
     else 
//Receiving side
        int fdFIFO = -1;
        struct stat buffer;
        if (stat("/tmp/PROCAtoPROCB", &buffer) != 0)
            mkfifo("/tmp/PROCAtoPROCB", (mode_t)0600);

        while (1) 
            struct pollfd pollfds[1];
            if (fdFIFO == -1)
                fdFIFO = open("/tmp/PROCAtoPROCB", O_RDONLY | O_NONBLOCK);
            pollfds[0].fd = fdFIFO;
            pollfds[0].events = POLLIN;
            poll(pollfds, 1, -1);
            if (pollfds[0].revents & POLLIN) 
                char buf[1024];
                read(fdFIFO, &buf, 1024);
                close(fdFIFO);
                fdFIFO = -1;
                printf("Other process says %s\n", buf);
            
            printf("End of loop\n");
        
    
    return 0;

它似乎正在工作,但我想知道是否存在导致挂起的竞争条件。一个限制是,两个进程都需要独立启动,并且可以按任意顺序启动。

【问题讨论】:

【参考方案1】:

一些压力测试表明没有问题,所以如果有人想重用代码,实现似乎没问题。

【讨论】:

以上是关于正确实现进程间通信 (IPC)的主要内容,如果未能解决你的问题,请参考以下文章

Android17.5 利用Messenger实现进程间通信(IPC)

进程间通信 (IPC) 方法总结

进程间通信

Linux 进程间通信(IPC)

Linux 进程间通信(IPC)总结

Linux 进程间通信(IPC)