Linux内核之双向通信Socketpair

本文介绍了Linux内核中的socketpair函数,它能创建全双工的流管道,类似于pipe但提供双向通信能力。尽管主要适用于线程间或有亲缘关系的进程间通信,socketpair在某些场景下比半双工的pipe更适用。参考代码可查看frameworks ativelibsinputInputTransport.cpp中的实现。
摘要由CSDN通过智能技术生成

双向通信(socketpair)
socketpair 函数
功能:创建一个全双工的流管道
原型 int socketpair(int domain, int type, int protocol, int sv[2]);
参数

domain: 协议家族
type: 套接字类型
protocol: 协议类型
sv: 返回套接字对

返回值:成功返回0;失败返回-1
实际上socketpair 函数跟pipe 函数是类似的,也只能在同个主机上具有亲缘关系的进程间通信,但pipe 创建的匿名管道是半双工的,而socketpair 可以认为是创建一个全双工的管道。

缺点:只适用于线程间,或者具有亲缘关系的进程间

实现一个进程间两个线程的相互通信:

#include <pthread.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>

#define SOCKET_BUFFER_SIZE      (32768U)


/* 参考:
 * frameworks\native\libs\input\InputTransport.cpp
 */

void *function_thread1 (void *arg)
{
   
    int fd = (int)arg; //Garmen:将传入的socket[0]进行转换
    char buf[500];
    int len;
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值