进程间通信之管道通信(FIFO命名管道)

先贴代码

写进程

//fifo_w.c
#include
#include
#include
#include
#include
#include
#include
int main()
{
    if(access("myfifo",F_OK))
    {
        mkfifo("myfifo",0777);
    }
    int fd = open("myfifo",O_WRONLY);
    char buf[1024];
    sprintf(buf,"helloworld!!!\n");
    write(fd,buf,strlen(buf));
    close(fd);
    return 0;
}

读进程

//fifo_r.c
#include
#include
#include
#include
#include
#include
#include
int main()
{
    if(access("myfifo",F_OK))
    {
        mkfifo("myfifo",0777);
    }
    int fd = open("myfifo",O_RDONLY);
    char buf[1024];
    int len = read(fd,buf,sizeof(buf));
    close(fd);
    write(STDOUT_FILENO,buf,strlen(buf));
    return 0;
}

FIFO命名管道通信,也是利用内核中的队列实现的进程间通信的一种技术,fifo于pipe区别在于fifo可以在没有血缘关系的进程间通信,通信借助FIFO文件在不同进程间实现通信,FIFO文件本身不存储内容,只是充当一个节点,实际还是用来映射到内核中的队列来实现通信

注意,读端程序关闭时候,写端程序也将推出。读短程序停止读时,写端写满队列后将阻塞。

你可能感兴趣的:(Linuxc)