zoukankan      html  css  js  c++  java
  • socketpair

    与pipe的区别

    pipe产生的文件描述符是半双工的,需要pipe两次才能实现全双工,产生的两个描述符是一个读,一个写
    socketpair直接就可以全双工,产生的两个文件描述符的任何一个都可读可写

    pipe例子

    #include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>
     
    int main(){
        int fd1[2],fd2[2];
     
        if(pipe(fd1) < 0 || pipe(fd2) < 0)
            exit(-1);
     
        if(fork()){
            int val=0;
            close(fd1[0]);
            close(fd2[1]);
     
            while(1){
                sleep(1);
                ++val;
                printf("parent send: %d
    ",val);
                write(fd1[1],&val,sizeof(val));
                read(fd2[0],&val,sizeof(val));
                printf("parent received: %d
    ",val);
            }
        }else{
            int val;
            close(fd1[1]);
            close(fd2[0]);
     
            while(1){
                read(fd1[0],&val,sizeof(val));
                printf("son Data received: %d
    ",val);
                ++val;
                write(fd2[1],&val,sizeof(val));
                printf("son send: %d
    ",val);
            }
        }
    }
    

    socketpair例子

    #include <sys/types.h>
    #include <sys/socket.h>
    #include <unistd.h>
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(){
        int fd[2];
        int ret;
     
        ret=socketpair(AF_LOCAL,SOCK_STREAM,0,fd);
        if(ret < 0){
            perror("socketpair");
            exit(-1);
        }
     
        if(fork()){
            int val=0;
            close(fd[1]);
            while(1){
                sleep(1);
                ++val;
                printf("parent sending data: %d
    ",val);
                write(fd[0],&val,sizeof(val));
                read(fd[0],&val,sizeof(val));
                printf("parent Data received: %d
    ",val);
            }
        }else{
            int val;
            close(fd[0]);
            while(1){
                read(fd[1],&val,sizeof(val));
                printf("son Data received: %d
    ",val);
                ++val;
                write(fd[1],&val,sizeof(val));
                printf("son send received: %d
    ",val);
            }
        }
    }
    
  • 相关阅读:
    async中series的实现 javascript构件
    6.算法-计数排序
    5.算法-快速排序
    4.堆排序
    3.分治法研究-搜索数组中的最长连续递增子集
    字典树(Trie)学习笔记
    并查集笔记
    求树的遍历
    P1087 FBI树
    P5017 摆渡车
  • 原文地址:https://www.cnblogs.com/cfans1993/p/6144815.html
Copyright © 2011-2022 走看看