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);
            }
        }
    }
    
  • 相关阅读:
    简单的Servlet结合Jsp实现请求和响应以及对doGet和doPost的浅析
    My1stServlet
    Myeclipse发布第一个jsp页面及web project部署到tomcat上的几种方法
    java中循环的不同终止方式
    Mybatis学习笔记
    python 进程间的数据交互
    python 进程
    python 队列
    python 多线程
    python paramiko 向linux执行命令和发送接收文件
  • 原文地址:https://www.cnblogs.com/cfans1993/p/6144815.html
Copyright © 2011-2022 走看看