zoukankan      html  css  js  c++  java
  • UNIX网络编程学习笔记:值-结果(value-result)参数

    前言

    当把套接口地址结构传递给套接口函数时,总是通过指针来传递的,即传递的是一个指向结构的指针。结构的长度也作为参数来传递,其传递的方式取决于结构的传递方向:从进程到内核,还是从内核到进程。

    1、从进程到内核

    从进程到内核传递套接口地址结构的函数有3个:bind、connect和sendto,这3个函数的一个参数是指向套接口地址结构的指针,另一个参数是结构的整数大小,例如:

    /* example */
    
    struct sockaddr_in serv;
    
    /* fill in serv{} */
    connect(sockfd, (struct sockaddr *)&serv, sizeof(serv));

    由于指针和指针所指结构的大小都传递给内核,所以从进程到内核要确切拷贝多少数据是知道的,如下图所示:

    image

    2、从内核到进程

    从内核到进程传递套接口地址结构的有4个函数:accept、recvfrom、getsockname和getpeername。这4个函数的两个参数是:指向套接口地址结构的指针和指向表示结构大小的整数的指针,例如:

    /* example */
    
    struct sockaddr_un     cli;    /* Unix domain */
    socketlen_t            len;
    
    len = sizeof(cli);             /* len is a value */
    getpeername(unixfd, (struct sockaddr *)&cli, &len);
    /* len may have changed */

    为何将结构大小由整数改为指向整数的指针呢?

    这是因为:当函数被调用时,结构大小是一个值(value,此值告诉内核该结构的大小,使内核在写此结构时不至于越界),当函数返回时,此结构又是一个结果(result,它告诉进程内核在此结构中确切存储了多少信息),这种参数类型叫做值-结果(value-result)参数,如下图所示:

    image

  • 相关阅读:
    AI
    CentoOS6.6安装netcat
    ip防刷脚本
    php git pull
    冥想_ PHP抽奖程序概率算法
    如何在CentOS配置Apache的HTTPS服务
    C++ 用RGB 三种颜色绘图
    Linux Vsftpd 连接超时解决方法(被动模式)
    js 函数返回函数
    模拟jquery的$()选择器的实现
  • 原文地址:https://www.cnblogs.com/nufangrensheng/p/3585046.html
Copyright © 2011-2022 走看看