socketpair函数_socket框架

socketpair函数_socket框架socketpair函数概要如下:#include 定义一些C宏常量#include 定义socketpair函数原型intsocketpair(intdomain,inttype,intprotocol,intsv[2]);socketpair函数需要四个参数:domain-套接口的域type-套接口类型protocol-使用的协议sv[2

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

Jetbrains全系列IDE稳定放心使用
socketpair函数概要如下:

#include <sys/types.h> 定义一些C宏常量

#include <sys/socket.h> 定义socketpair函数原型

int socketpair(int domain, int type, int protocol, int sv[2]);

socketpair函数需要四个参数:

domain-套接口的域

type-套接口类型

protocol-使用的协议

sv[2]-指向存储文件描述符的指针

类型参数声明了我们希望创建哪种类型的套接口,socketpair函数的选择如下:

SOCK_STREAM

SOCK_DGRAM

对于socketpair函数,protocol参数必须提供为0。

参数sv[2]是接收代表两个套接口的整数数组。每一个文件描述符代表一个套接口,并且与另一个并没有区别。

如果函数成功,将会返回0值。否则将会返回-1表明创建失败,并且errno来表明特定的错误号。

socketpair可以用于多进程间全双工通讯。

1.调用socketpair,成功后便有两个socket文件描述符,一个socket就像是一个pipe。

    在两个socket中指定一个给父进程使用,另外一个给子进程使用。不用在意指定哪一个socket给父进程使用,随便挑一个就可以了。

2.调用fork,成功后就创建了子进程

    2.1 fork返回0,那就是子进程,关闭父进程的socket,保留子进程的socket

    2.2 fork返回非0,那就是父进程,关闭子进程的socket,保留父进程的socket

    为什么要关闭socket,现在还没有搞清楚。

3.现在有父子两个进程,每个进程都有一个socket描述符用以代表同一个pipe的两端。如果父进程调用write,那么子进程就调用read,反之亦然。

以下是一个代码示例片段:

void child(int socket) {
    const char hello[] = "hello parent, I am child";
    write(socket, hello, sizeof(hello)); /* NB. this includes nul */
    /* go forth and do childish things with this end of the pipe */
}

void parent(int socket) {
    /* do parental things with this end, like reading the child's message */
    char buf[1024];
    int n = read(socket, buf, sizeof(buf));
    printf("parent received '%.*s'\n", n, buf);
}

void socketfork() {
    int fd[2];
    static const int parentsocket = 0;
    static const int childsocket = 1;
    pid_t pid;

    /* 1. call socketpair ... */
    socketpair(PF_LOCAL, SOCK_STREAM, 0, fd);

    /* 2. call fork ... */
    pid = fork();
    if (pid == 0) { /* 2.1 if fork returned zero, you are the child */
        close(fd[parentsocket]); /* Close the parent file descriptor */
        child(fd[childsocket]);
    } else { /* 2.2 ... you are the parent */
        close(fd[childsocket]); /* Close the child file descriptor */
        parent(fd[parentsocket]);
    }
    exit(0); /* do everything in the parent and child functions */
}

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/182106.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 数据归一化处理transforms.Normalize()

    数据归一化处理transforms.Normalize()数据归一化处理transforms.Normalize()1.图像预处理Transforms(主要讲解数据标准化)1.1理解torchvisiontransforms属于torchvision模块的方法,它是常见的图像预处理的方法在这里贴上别人整理的transforms运行机制:可以看出torchvision工具包中包含三个主要模块,主要讲解学习transformstorchvision.transforms:常用的数据预处理方法,提升泛化能力包括:数据中心化、数据标准化、缩放、裁剪、旋

  • 科研伦理与学术规范期末考试1题库「建议收藏」

    科研伦理与学术规范期末考试1题库「建议收藏」**科研伦理与学术规范期末考试1题库**自行复制到自己的文档当中便于搜索1.科研伦理与学术规范引论科研伦理与学术规范引论试题1、下列说法错误的是?A、所有的规范的评判都涉及到“善恶正邪”的价值判断B、伦理学已经从传统的以人为中心走向现代的以行为为中心C、现代伦理学主要关注以行为、准则、规范、义务D、规范则未必均是在道德层面上具有调整性参考答案:A2、哈佛模式下的引证规范的特点是?A、注释引证式B、插句式C、循环数字编码式D、MLA引用格式参考答案:B3、关于科研伦理和学术

  • python创意小作品代码_python浪漫表白源码

    python创意小作品代码_python浪漫表白源码这篇文章主要为大家详细介绍了python实现浪漫的烟花秀,具有一定的参考价值,感兴趣的小伙伴们可以参考一下无意中看到一段用Tkinter库写的放烟花的程序,就跟着跑了一遍。设计理念:通过让画面上一个粒子分裂为X数量的粒子来模拟爆炸效果。粒子会发生“膨胀”,意思是它们会以恒速移动且相互之间的角度相等。这样就能让我们以一个向外膨胀的圆圈形式模拟出烟花绽放的画面。经过一定时间后,粒子会进入“自由落体”阶…

  • java linkedhashset_Java LinkedHashSet「建议收藏」

    java linkedhashset_Java LinkedHashSet「建议收藏」JavaLinkedHashSet1什么是JavaLinkedHashSetJavaLinkedHashSet类实现了Set接口。并且HashSet的子类。关于JavaLinkedHashSet类的核心要点是:JavaLinkedHashSet类不能存储重复元素,和HashSet相似。JavaLinkedHashSet类提供所有Set接口的操作,并允许空元素。JavaLinkedH…

    2022年10月12日
  • [电池]Android 9.0 电池未充电与充电字符串提示信息[通俗易懂]

    [电池]Android 9.0 电池未充电与充电字符串提示信息[通俗易懂]1.电池电量提醒1.1未充电提醒若没有预估时间,则提示显示电池百分比若预估时间小于7分钟,则提示手机可能即将关机若预估时间小于15分钟,则提示剩余电池续航时间不到15分钟若15分钟&lt;预估时间&lt;1天,则提示估计大约还能用到xxh,xxmin,xxsec若预估时间大于1天,则提示大约还可使用1days,xhr,xmin,xsec若预估时间大于2…

    2022年10月24日

发表回复

您的电子邮箱地址不会被公开。

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