美文网首页
进程通信之有名管道

进程通信之有名管道

作者: 二进制人类 | 来源:发表于2022-09-28 19:27 被阅读0次

创建

方式一

shell 命令创建

mkfifo -m 777 myfifo

方式二

#include <sys/types.h>
#include <sys/stat.h>
/**
 * [mkfifo 创建有名管道]
 * @param  pathname [需要创建的管道文件名称(绝对路径和相对路径)]
 * @param  mode     [设置管道文件的访问权限(mode & ~umask)]
 * @return          [成功返回0,失败返回-1且修改errno的值]
 */
int mkfifo(const char *pathname, mode_t mode);

实例

发送

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main()
{
    int fd;
    int ret;
    char buf[256];

    /*1. 打开有名管道文件 */
    fd = open("myfifo", O_WRONLY);
    if (fd == -1)
    {
        perror("open");
        return -1;
    }

    while(1)
    {
        /* 键盘获取数据 */
        fgets(buf, sizeof(buf), stdin);
        /* 写数据到有名管道文件中:发送数据 */
        ret = write(fd, buf, sizeof(buf));
        if (ret == -1)
        {
            perror("write");
            return -1;
        }
    }

    close(fd);
}

接收

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main()
{
    int fd;
    int ret;
    char buf[256];
    /*1. 打开有名管道文件 */
    fd = open("myfifo", O_RDONLY);
    if (fd == -1)
    {
        perror("open");
        return -1;
    }
    while(1)
    {
        /* 清空buf中数据 */
        memset(buf, 0, sizeof(buf));
        /* 从有名管道文件中读数据:接收数据 */
        ret = read(fd, buf, sizeof(buf));
        if (ret == -1)
        {
            perror("read");
            return -1;
        }
        else if(ret == 0)
        {
            break;
        }
        printf("buf : %s\n", buf);
    }
    close(fd);
}

相关文章

  • 进程间通信方式

    管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字...

  • 进程通信方式

    1、管道与有名管道管道可用于具有亲缘关系的父子进程间通信,有名管道除了具有管道的特点外,还允许无亲缘关系的进程进行...

  • Linux进程间通信

    Linux进程间通信的概念 linux下进程间通信的几种主要手段简介: 管道(Pipe)及有名管道(named p...

  • Android 进程通信--Binder机制

    一、起源——为什么在Android中使用binder通信机制? linux中的进程通信 管道包含无名管道和有名管道...

  • LInux进程之间的通信-有名管道(FIFO)

    Linux进程间的通信-有名管道FIFO 管道的通信只能存在于具有亲缘关系的进程之间,比如fork出来的子进程与父...

  • 14.进程间通信:管道

    1. 管道,有名管道和无名管道。 1.1 无名管道主要用于父子进程或者兄弟关系的进程间的通信。通过pipe创建无名...

  • Instruments之Leaks

    1. 介绍 1. 进程 进程是系统资源分配的最小单位 进程结构 进程通信 pipe管道fifo有名管道内存共享映射...

  • 使用os pipe管道使python fork多进程之间通信

    管道(pipe) 管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功...

  • 线程-进程间通信(操作系统、java、android)最全总结!

    大纲 操作系统进程间通信 进程的通信机制主要有:管道、有名管道、消息队列、信号量、共享空间、信号、套接字。 操作系...

  • PHP进程间通信--消息队列

    前面介绍了怎么通过消息管道(有名消息管道)进行进程间通信,下面介绍如何通过消息队列实现进程间通信。 首先我们来看一...

网友评论

      本文标题:进程通信之有名管道

      本文链接:https://www.haomeiwen.com/subject/mmmkartx.html