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);
            }
        }
    }
    
  • 相关阅读:
    (十一)QPainter绘图, QPixmap,QImage,QPicture,QBitmap
    (十)事件,定时器
    (九)自定义控件
    (八)控件介绍,QLable
    (六)QDialog,QMessageBox,QFileDialog,QColorDialog颜色,QFontDialog字体
    (七)布局
    (五)qt资源文件
    (四)窗口mainwindow
    (三)信号与槽
    JMeter学习-011-JMeter 后置处理器实例之
  • 原文地址:https://www.cnblogs.com/cfans1993/p/6144815.html
Copyright © 2011-2022 走看看