c++ linux通过实现独立进程之间的通信和传递字符串 demo

#include <iostream>
#include <cstring>
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>

const char* PIPE_NAME = "/tmp/my_pipe";

int main() {
    // 创建命名管道
    mkfifo(PIPE_NAME, 0666);

    pid_t childPid = fork();

    if (childPid == 0) {
        // 子进程写入字符串到命名管道
        int fd = open(PIPE_NAME, O_WRONLY);
        const char* message = "Hello, parent!";
        write(fd, message, strlen(message) + 1);
        close(fd);
        exit(0);
    } else if (childPid > 0) {
        // 父进程读取命名管道中的字符串
        int fd = open(PIPE_NAME, O_RDONLY);
        char buffer[100];
        read(fd, buffer, sizeof(buffer));
        std::cout << "Message received from child: " << buffer << std::endl;
        close(fd);
    } else {
        std::cerr << "Fork failed." << std::endl;
        return 1;
    }

    // 删除命名管道
    unlink(PIPE_NAME);

    return 0;
}

要通过信号实现独立进程之间的通信和传递字符串,可以使用命名管道(Named Pipe)来实现。

在上面的示例中,我们首先使用 mkfifo 函数创建了一个命名管道。命名管道的路径在 PIPE_NAME 定义中指定为 "/tmp/my_pipe"。

然后,我们使用 fork 创建了一个子进程。

在子进程中,我们使用 open 函数打开命名管道,并以只写模式打开。然后,我们将字符串 "Hello, parent!" 写入管道中,并使用 close 函数关闭管道。最后,子进程调用 exit 退出。

在父进程中,我们使用 open 函数打开命名管道,并以只读模式打开。然后,我们使用 read 函数从管道中读取字符串,并将其存储在缓冲区 buffer 中。最后,我们打印出从子进程接收到的字符串,并使用 close 函数关闭管道。

最后,我们使用 unlink 函数删除命名管道。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值