当前位置: 首页 > news >正文

重庆网站建设有限公司网站免费制作

重庆网站建设有限公司,网站免费制作,怎么让网站收录在google,昆山自适应网站建设简述 在Linux中,socketpair函数可以用于创建一对相互连接的、通信域为AF_UNIX的套接字,其中一个套接字可用于读取,另一个套接字可用于写入。可以使用这对套接字在同一进程内进行进程间通信(IPC)。 以下是使用socketp…

简述

在Linux中,socketpair函数可以用于创建一对相互连接的、通信域为AF_UNIX的套接字,其中一个套接字可用于读取,另一个套接字可用于写入。可以使用这对套接字在同一进程内进行进程间通信(IPC)。

以下是使用socketpair函数创建套接字对的基本步骤:

  1. 包含头文件 sys/types.hsys/socket.hunistd.h

  2. 声明一个长度为2的数组作为套接字描述符的参数。

  3. 调用 socketpair 函数,并将套接字描述符数组作为参数传递给它。函数原型为:

    int socketpair(int domain, int type, int protocol, int sv[2]);
    
    • domain参数指定通信域,通常设置为AF_UNIX。
    • type参数指定套接字类型,可以设置为SOCK_STREAMSOCK_DGRAM
    • protocol参数通常设置为0,表示使用默认协议。
    • sv参数是一个长度为2的整数数组,用于保存创建的套接字描述符。
  4. 使用sv数组中的套接字描述符进行进程间通信。

Linux举例

下面是一个基于 socketpair 的简单例子,用于在父子进程之间传递数据:

#include <unistd.h>
#include <sys/socket.h>
#include <stdio.h>
#include <string.h>int main() {int sockfd[2];char buf[1024];pid_t pid;if (socketpair(AF_UNIX, SOCK_STREAM, 0, sockfd) < 0) {perror("socketpair");return 1;}if ((pid = fork()) == -1) {perror("fork");return 1;}if (pid == 0) {  // 子进程close(sockfd[0]);char msg[] = "Hello, parent!";if (write(sockfd[1], msg, strlen(msg)) < 0) {perror("write");return 1;}close(sockfd[1]);} else {  // 父进程close(sockfd[1]);int n = read(sockfd[0], buf, sizeof(buf));if (n < 0) {perror("read");return 1;}printf("Parent: received message from child: %s\n", buf);close(sockfd[0]);}return 0;
}

该程序首先调用 socketpair 函数创建一对 UNIX 域套接字,存储在 sockfd 数组中。然后,程序调用 fork 函数创建一个子进程。在子进程中,它关闭 sockfd[0],然后将一条消息写入 sockfd[1],然后关闭 sockfd[1]。在父进程中,它关闭 sockfd[1],然后从 sockfd[0] 中读取一条消息,并将其打印到标准输出中,最后关闭 sockfd[0]

当该程序运行时,它会创建一个子进程,子进程向父进程发送一条消息,父进程接收到该消息并将其打印出来:

Parent: received message from child: Hello, parent!

Android framework 举例

android-12.0.0_r28/frameworks/native/libs/sensor/BitTube.cpp

BitTube
void BitTube::init(size_t rcvbuf, size_t sndbuf) {int sockets[2];if (socketpair(AF_UNIX, SOCK_SEQPACKET, 0, sockets) == 0) {size_t size = DEFAULT_SOCKET_BUFFER_SIZE;setsockopt(sockets[0], SOL_SOCKET, SO_RCVBUF, &rcvbuf, sizeof(rcvbuf));setsockopt(sockets[1], SOL_SOCKET, SO_SNDBUF, &sndbuf, sizeof(sndbuf));// sine we don't use the "return channel", we keep it small...setsockopt(sockets[0], SOL_SOCKET, SO_SNDBUF, &size, sizeof(size));setsockopt(sockets[1], SOL_SOCKET, SO_RCVBUF, &size, sizeof(size));fcntl(sockets[0], F_SETFL, O_NONBLOCK);fcntl(sockets[1], F_SETFL, O_NONBLOCK);mReceiveFd = sockets[0];mSendFd = sockets[1];} else {mReceiveFd = -errno;ALOGE("BitTube: pipe creation failed (%s)", strerror(-mReceiveFd));}
}

BitTube.cpp 是 Android 中传感器服务和传感器驱动程序之间通信使用的 BitTube 类的实现文件。

InputTransport

android-12.0.0_r28/frameworks/native/libs/input/InputTransport.cpp

status_t InputChannel::openInputChannelPair(const std::string& name,std::unique_ptr<InputChannel>& outServerChannel,std::unique_ptr<InputChannel>& outClientChannel) {int sockets[2];if (socketpair(AF_UNIX, SOCK_SEQPACKET, 0, sockets)) {status_t result = -errno;ALOGE("channel '%s' ~ Could not create socket pair.  errno=%s(%d)", name.c_str(),strerror(errno), errno);outServerChannel.reset();outClientChannel.reset();return result;}int bufferSize = SOCKET_BUFFER_SIZE;setsockopt(sockets[0], SOL_SOCKET, SO_SNDBUF, &bufferSize, sizeof(bufferSize));setsockopt(sockets[0], SOL_SOCKET, SO_RCVBUF, &bufferSize, sizeof(bufferSize));setsockopt(sockets[1], SOL_SOCKET, SO_SNDBUF, &bufferSize, sizeof(bufferSize));setsockopt(sockets[1], SOL_SOCKET, SO_RCVBUF, &bufferSize, sizeof(bufferSize));sp<IBinder> token = new BBinder();std::string serverChannelName = name + " (server)";android::base::unique_fd serverFd(sockets[0]);outServerChannel = InputChannel::create(serverChannelName, std::move(serverFd), token);std::string clientChannelName = name + " (client)";android::base::unique_fd clientFd(sockets[1]);outClientChannel = InputChannel::create(clientChannelName, std::move(clientFd), token);return OK;
}

在 Android Input 系统中,InputTransport 使用 socketpair 函数创建一对全双工的本地套接字(socket),用于在应用程序和驱动程序之间传递输入事件。其中一个套接字用于向驱动程序发送输入事件,另一个套接字用于接收来自驱动程序的输入事件。通过这种方式,InputTransport 可以将输入事件发送到驱动程序,并接收驱动程序生成的输入事件。

http://www.hkea.cn/news/993627/

相关文章:

  • 做网站遇到的困难总结网络营销软件代理
  • 做网站登录论坛外链代发
  • 东营专业网站建设公司排行青岛谷歌优化公司
  • 公众号和网站先做哪个口碑营销的形式
  • 长沙企业建网站费用关键词搜索推广排行榜
  • 怎么做网站端口代理沧州网络推广外包公司
  • php wordpress 目录seo课程培训机构
  • 常州网站建设方案优化引流app推广软件
  • 网络营销网站建设实训网络营销步骤
  • 网站都有后台吗百度竞价开户公司
  • 秭归网站建设网站seo优化心得
  • wordpress电影网站模板seo运营
  • 公司注册网上核名业务如何终止网站排名优化怎么做
  • 网站建设伍金手指下拉2网上推广平台
  • 沧州网站建设公司翼马爱情链接
  • 计算机学了出来干嘛免费优化推广网站的软件
  • 宁波网站建设优化湖南seo优化按天付费
  • 门户网站手机版google官网入口
  • 深圳市工程建设交易服务中心网站软文什么意思
  • 大型网架加工厂成都网站建设方案优化
  • 导航网站的广告怎么做的千锋教育官方网
  • etc网站开发票网站制作软件免费下载
  • 上海seo网站设计2022十大网络营销案例
  • 还有做网站的必要吗网站运营推广方案
  • 企业营销型网站建设厂家品牌搜索引擎服务优化
  • 学校网站建设计划怎么成为百度推广代理商
  • 普陀网站开发培训学校seo快速优化
  • 建一个商城网站多少钱免费的网站推广软件
  • 手机网站解决方案看网站搜什么关键词
  • 顺企网江西网站建设宜昌今日头条新闻