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);
            }
        }
    }
    
  • 相关阅读:
    面试(5)
    面试(五)
    面试(4)
    面试(四)
    面试(三)
    面试(2,3)
    利用session控制 长时间未操作自动退出登录
    一次性清除所有session
    动态引进js文件
    Vue--findIndex方法的使用原理
  • 原文地址:https://www.cnblogs.com/cfans1993/p/6144815.html
Copyright © 2011-2022 走看看