菜单
  

    #include <sys/types.h>

    #include <sys/socket.h>

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

    socketpair()函数用于创建一对无名的、相互连接的套接子。 

    如果函数成功,则返回0,创建好的套接字分别是sv[0]和sv[1];否则返回-1,错误码保存于errno中。

     

    基本用法: 

    1. 这对套接字可以用于全双工通信,每一个套接字既可以读也可以写。例如,可以往sv[0]中写,从sv[1]中读;或者从sv[1]中写,从sv[0]中读; 

    2. 如果往一个套接字(如sv[0])中写入后,再从该套接字读时会阻塞,只能在另一个套接字中(sv[1])上读成功; 

    3. 读、写操作可以位于同一个进程,也可以分别位于不同的进程,如父子进程。如果是父子进程时,一般会功能分离,一个进程用来读,一个用来写。因为文件描述副sv[0]和sv[1]是进程共享的,所以读的进程要关闭写描述符, 反之,写的进程关闭读描述符。 

    读写操作位于同一进程

    #include <stdio.h> 

    #include <string.h> 

    #include <unistd.h> 

    #include <sys/types.h> 

    #include <error.h> 

    #include <errno.h> 

    #include <sys/socket.h> 

    #include <stdlib.h> 

     

    const char* str = "SOCKET PAIR TEST.";

     

    int main(int argc, char* argv[]){

        char buf[128] = {0};

        int socket_pair[2]; 

        pid_t pid; 

     

        if(socketpair(AF_UNIX, SOCK_STREAM, 0, socket_pair) == -1 ) { 

            printf("Error, socketpair create failed, errno(%d): %s\n", errno, strerror(errno));

            return EXIT_FAILURE; 

        } 

     

        int size = write(socket_pair[0], str, strlen(str));

        //可以读取成功;

        read(socket_pair[1], buf, size);

        printf("Read result: %s\n",buf);

        return EXIT_SUCCESS;    

    读写操作位于不同进程

     

    #include <stdio.h> 

    #include <string.h> 

    #include <unistd.h> 

    #include <sys/types.h> 

    #include <error.h> 

    #include <errno.h> 

    #include <sys/socket.h> 

    #include <stdlib.h> 

     

    const char* str = "SOCKET PAIR TEST.";

     

    int main(int argc, char* argv[]){

        char buf[128] = {0};

        int socket_pair[2]; 

        pid_t pid; 

     

        if(socketpair(AF_UNIX, SOCK_STREAM, 0, socket_pair) == -1 ) { 

            printf("Error, socketpair create failed, errno(%d): %s\n", errno, strerror(errno));

            return EXIT_FAILURE; 

        } 

     

        pid = fork();

        if(pid < 0) {

            printf("Error, fork failed, errno(%d): %s\n", errno, strerror(errno));

            return EXIT_FAILURE;

        } else if(pid > 0) {

            //关闭另外一个套接字

            close(socket_pair[1]);

            int size = write(socket_pair[0], str, strlen(str));

  1. 上一篇:关心下一代工作委员会工作心得体会
  2. 下一篇:<activity-alias>标签详解和使用
  1. havehas的用法

  2. microsoft.xmlhttp组件的用法和属性

  3. SendMessage函数用法详解及消息详解

  4. FileSystemWatcher的C#的FileSystemWatcher用法

  5. python中yield的用法举例

  6. @Deprecated注解功能用法不建议使用废弃的

  7. explicit c++中的作用和用法

  8. 玫瑰精油特征香气成分研究

  9. 多级反馈队列调度算法的研究+源代码

  10. Toeplitz定理及其应用+文献综述

  11. 从何红舟《桥上的风景》中感受油画构成美

  12. 运动员广告形象塑造文献综述和参考文献

  13. 甲硫醇钠生产工艺设计任务书

  14. 身体自尊量表(PSPP)

  15. 街头游园设计

  16. 货币国际化国内外研究现状

  17. 进出口贸易与经济增长文献综述和参考文献

  

About

优尔论文网手机版...

主页:http://www.youerw.com

关闭返回