socketpair创建双向通信的管道

本文介绍了如何通过socketpair创建双向通信的管道,作为替代单向通信的pipe方案。socketpair使得两端都能同时进行读写操作。
摘要由CSDN通过智能技术生成

这次要给大家分享的是关于socketpair相关知识,我们知道pipe是用来创建管道实现通信的,而单个管道只能单向通信,一端用于读而另一端用于写,如果要实现双向通信(两端都可以读,都可以写),必须创建一对管道。
而socketpair可以⽤用来创建双向通 信的管道,具体实现如下:
代码:

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>

int main()
{
    int fd[2];
    int ret = socketpair(PF_LOCAL, SOCK_STREAM, 0, fd);
    if (ret != 0)
    {
        perror("socketpair()");
        return ret;
    }
    pid_t id = fork();
    if (id < 0)
    {
        perror("fork()");
        return id;
    }
    else if (id == 0)
    {
        close(fd[0]);
        char buf[512];
        while (1)
    {   
        memset(buf, 0, sizeof(buf)); 
        strcpy(buf, "hello world");                                         
        write(fd[1], buf, sizeof(buf));
        read(fd[1], buf, sizeof(buf));
        sleep(1);
        printf("%s\n", buf);
        }
    }
    else if (id > 0)
    {
        close(fd[1]);
        char buf[512];
        while (1)
        {
            memset(buf, 0, sizeof(buf));
            read(fd[0], buf, sizeof(buf));
            printf("%s\n", buf);
            strcpy(buf, "hello world too!");
            write(fd[0], buf, sizeof(buf));
        }
    }
    else
    {}
                                                                return 0;
}

运行结果如下图:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值