Socketpair 简介「建议收藏」

Socketpair 简介「建议收藏」socketpair-aslightgeneralizationofpipesusedfortwo-waystreamcommunication.以下内容来自:匠意雕码http://my.oschina.net/zengsai/blog/12583

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

socketpair – a slight generalization of pipes used for two-way stream communication.

以下内容来自:匠意雕码 http://my.oschina.net/zengsai/blog/12583

今天用了一个从没玩过的socket函数socketpair(),它的作用是在进程内创建一对sock连接。乍一看好像也没什么,但是配合fork()使用之后就是各种欢乐。如下。

#define STRING1 “message from parent”
#define STRING2 “messgae from child”

#include <sys/types.h>

#include <sys/socket.h>
#include <stdio.h>
#include <errno.h>

main()
{

int sockets[2], child;
char buf[1024];

/* Get the socket pair */
if (socketpair(AF_UNIX, SOCK_STREAM,
0, sockets) < 0) {

printf(“error %d on socketpair\n”, errno);
exit(1);
}

/* create child process */
if ((child = fork()) == -1) {

printf(“fork error %d\n”, errno);
exit(1);
}

if (child != 0) { /* this is the parent */
/* close child’s end of socket */
close(sockets[0]);

/* read message from child */
if (read(sockets[1], buf, sizeof(buf)) < 0) {

printf(“error %d reading socket\n”, errno);
exit(1);
}
printf(“–>%s\n”, buf);

/* write message to child */
if (write(sockets[1],
STRING1, sizeof(STRING1)) < 0) {

printf(“error %d writing socket\n”, errno);
exit(1);
}

/* finished */
close(sockets[1]);

} else { /* the child */

/* close parent’s end of socket */
close(sockets[1]);

/* send message to parent */
if (write(sockets[0], STRING2,
sizeof(STRING1)) < 0) {

printf(“error %d writing socket\n”, errno);
exit(1);
}

/* get message from parent */

if (read(sockets[0],
buf, sizeof(buf)) < 0) {

printf(“error %d reading socket\n”, errno);
exit(1);
}
printf(“–>%s\n”, buf);

/* finished */
close(sockets[0]);
}
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182078.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • docker下Jenkins的部署和升级「建议收藏」

    docker下Jenkins的部署和升级「建议收藏」获取Jenkins镜像dockersearchjenkinsdockerpulljenkinsdockerimages创建映射目录mkdir-p/var/jenkins_homechown-R1000:1000/var/jenkins_home启动jenkins镜像sudodockerrun-itd-p8080:8080-p50000:50000–namejenkins–privileged=true-v/home/jenkins_

    2022年5月15日
    39
  • 赚一个亿真的不难,不信你看下面代码

    赚一个亿真的不难,不信你看下面代码privatevoidComputeActionPerformed(java.awt.event.ActionEventevt){//TODOaddyourhandlingcodehere:if(Salary.getText().isEmpty()||Aim.getText().isEmpty()||Saving.getText().isEmpty()){..

    2022年6月12日
    29
  • Hive数据类型[通俗易懂]

    Hive数据类型[通俗易懂]1.Hive数据类型Hive支持原始数据类型和复杂类型,原始类型包括数值型,Boolean,字符串,时间戳。复杂类型包括数组,map,struct。下面是Hive数据类型的一个总结:分类类型描述字面量示例原始类型BOOLEANtrue/falseTRUETINYINT1字节的有符号整数-128~1271YSMALL

    2022年4月19日
    72
  • pycharm激活码最新【中文破解版】

    (pycharm激活码最新)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月30日
    43
  • Android系统签名以及生成keystore秘钥

    Android系统签名以及生成keystore秘钥Android11系统签名以及keystore一、什么是系统签名Android下所有APP都要进行签名,而有些权限,只有系统签名了的APP可以拥有。而且需要在APP的AndroidManifest中添加以下IDandroid:sharedUserId=”android.uid.system”二、使用signapk.jar签名2.1找到对应文件(1)在根目录下创建keystore文件夹以方便工作(2)查找密钥和证书build/target/product/security/plat

    2022年6月21日
    83
  • Hi3516DV300双目开发板开发环境搭建

    Hi3516DV300双目开发板开发环境搭建Hi3516DV300双目开发板开发环境搭建1、软件包安装参考:《Hi3516CV500╱Hi3516DV300SDK安装及升级使用说明》将sdk和交叉工具链文件在同一目录展开sdk包1.进入Hi3516CV500_SDK_V2.0.1.0目录下执行./sdk.unpack(请用root或sudo权限执行)2.解压tar–xzfarm-himix200-linux.tgz,进入arm-himix200-linux目录运行chmod+xarm-himix200-l

    2022年9月2日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号