首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在mono/Linux下从命名管道读/写

在 Linux 下,命名管道(named pipe)是一种特殊类型的文件,用于在不同进程之间进行数据传输。命名管道有两种类型:FIFO 和 socketpair。

从命名管道读取数据的方法是使用 open() 系统调用打开管道,然后使用 read() 系统调用从管道中读取数据。例如:

代码语言:c
复制
#include<stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>

int main() {
    int fd;
    char buf[1024];

    // 打开命名管道
    fd = open("my_pipe", O_RDONLY);
    if (fd < 0) {
        perror("open");
        exit(1);
    }

    // 从管道中读取数据
    int n = read(fd, buf, sizeof(buf));
    if (n < 0) {
        perror("read");
        exit(1);
    }

    // 输出读取到的数据
    printf("Read %d bytes from the pipe: %s\n", n, buf);

    // 关闭管道
    close(fd);

    return 0;
}

从命名管道写入数据的方法是使用 open() 系统调用打开管道,然后使用 write() 系统调用向管道中写入数据。例如:

代码语言:c
复制
#include<stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>

int main() {
    int fd;
    char buf[] = "Hello, world!";

    // 打开命名管道
    fd = open("my_pipe", O_WRONLY);
    if (fd < 0) {
        perror("open");
        exit(1);
    }

    // 向管道中写入数据
    int n = write(fd, buf, sizeof(buf));
    if (n < 0) {
        perror("write");
        exit(1);
    }

    // 关闭管道
    close(fd);

    return 0;
}

需要注意的是,命名管道是一种同步 I/O 方式,如果读取或写入的进程没有准备好,则会阻塞。如果需要异步 I/O,则需要使用其他方式,例如使用套接字(socket)进行通信。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 使用命名管道通讯的命令执行工具

    管道并不是什么新鲜事物,它是一项古老的技术,可以在很多操作系统(Unix、Linux、Windows 等)中找到,其本质是是用于进程间通信的共享内存区域,确切的的说应该是线程间的通信方法(IPC)。 顾名思义,管道是一个有两端的对象。一个进程向管道写入信息,而另外一个进程从管道读取信息。进程可以从这个对象的一个端口写数据,从另一个端口读数据。创建管道的进程称为管道服务器(Pipe Server),而连接到这个管道的进程称为管道客户端(Pipe Client)。 在 Windows 系统中,存在两种类型的管道: “匿名管道”(Anonymous pipes)和“命名管道”(Named pipes)。匿名管道是基于字符和半双工的(即单向);命名管道则强大的多,它是面向消息和全双工的,同时还允许网络通信,用于创建客户端/服务器系统。

    06
    领券