管道socket什么意思_pipe是什么意思

管道socket什么意思_pipe是什么意思在看Android输入系统的时候,第一次看到socketpair,发现和管道非常相似。唯他们的区别就是socketpair,默认支持全双工,而pipe是半双工的。他们一样只能用在父子进程或者线程之间通信。下面分别以socketpair和管道实现全双工通信。管道实现线程间全双工通信#include#include#include#

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

在看Android 输入系统的时候,第一次看到socketpair,发现和管道非常相似。唯他们的区别就是socketpair,默认支持全双工,而pipe是半双工的。他们一样只能用在父子进程或者线程之间通信。

下面分别以socketpair和管道实现全双工通信。

管道实现线程间全双工通信

#include<stdio.h>
#include<pthread.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>

#define SIZE 1024

int fd1[2],fd2[2]; //fd1[0]:read,  fd1[1]:write

void *func_thread1(void *arg)
{
    char buf[SIZE] = {0};
    int cnt = 0;
    while(1)
    {
        sprintf(buf,"hello main %d\n",cnt++);
        write(fd1[1],buf,strlen(buf));
        int len = read(fd2[0],buf,SIZE);
        buf[len] = '\0';
        printf("%s",buf);
        bzero(buf,SIZE);
        sleep(3);
    }
    return NULL;
}

int main(int agrc,char**argv)
{
    pthread_t thread1_t;

    /*1. create pipe*/
    pipe(fd1);
    pipe(fd2);
    /*2. create thread1*/
    pthread_create(&thread1_t, NULL,
                          func_thread1, NULL);
    char buf[SIZE] = {0};
    int cnt = 0;
    char * p = buf;
    printf("buf[SIZE] sizeof:%d, strlen:%d\n",sizeof(buf),strlen(buf));
    printf(" char * p sizeof:%d, strlen:%d\n",sizeof(p),strlen(p));
    while(1){
        int len = read(fd1[0],buf,SIZE);
        buf[len] = '\0';
        printf("%s",buf);
        bzero(buf,SIZE);
        sprintf(buf,"hello thread %d\n",cnt++);
        write(fd2[1],buf,strlen(buf));  
        sleep(3);
    }
    return 0;
}

Socketpair实现线程间全双工通信

#include <stdio.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <pthread.h>

#define SIZE 1024

void *func_thread1(void *arg)
{
    char buf[SIZE] = {
  
  0};
    int cnt = 0;
    int fd = (int)arg;
    while(1)
    {
        sprintf(buf,"hello main %d\n",cnt++);
        write(fd,buf,strlen(buf));
        int len = read(fd,buf,SIZE);
        buf[len] = '\0';
        printf("%s",buf);
        bzero(buf,SIZE);
        sleep(3);
    }
    return NULL;
}

int main(int agrc,char**argv)
{
    int fd[2];
    pthread_t thread1_t;

    /*1. create socketpair*/
    int ret = socketpair(AF_UNIX,SOCK_STREAM,0,fd);
    if(ret < 0){
        perror("socketpair");
        exit(-1);
    }
    /*2. create thread1*/
    pthread_create(&thread1_t, NULL,
                          func_thread1, fd[1]);
    char buf[SIZE] = {
  
  0};
    int cnt = 0;
    char * p = buf;

    while(1){
        int len = read(fd[0],buf,SIZE);
        buf[len] = '\0';
        printf("%s",buf);
        bzero(buf,SIZE);
        sprintf(buf,"hello thread %d\n",cnt++);
        write(fd[0],buf,strlen(buf));   
        sleep(3);
    }
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/181914.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 如何恢复MacBook或iMac的出厂设置

    如何恢复MacBook或iMac的出厂设置不少mac小伙伴,都或多或少有过想把macbook或imac恢复出厂设置的经历。本文简单介绍了恢复出厂设置的办法。在此之前,先确认是否尝试过首先修复Mac?如果遇到软件问题,可以通过在macOSRecovery中简单地重新安装macOS来解决许多问题。只要在使用磁盘工具时不擦除硬盘驱动器,就可以保留所有数据!当然,如果由于要出售Mac或要擦除所有数据而要完全重置Mac,则另当别论。如何macOS恢复在重置Mac的过程中,您需要多次输入macOSRecovery才能完成这些步骤。所以首先进入ma

  • LeetCode219:Contains Duplicate II

    LeetCode219:Contains Duplicate II

  • Mysql命令行修改字段类型

    Mysql命令行修改字段类型在做微信公众平台知识百科(账号:zhishiwiki)时,因为字段先前设计的不合理,导致内容装不下,因此需要修改其字段类型为text这里使用到了alter命令altertable表名称modify字段名称字段类型[是否允许非空];作者说:只有用到了,才能学

  • 安卓中listview的使用步骤_安卓listview控件的用法

    安卓中listview的使用步骤_安卓listview控件的用法1)排序ListView通过适配器得到内容数据,可以对数据list先排序再提供给ListView:privateList>getData(){List>list=newArrayList>();//addData…//对list进行排序if(!list.isEmpty()){Collections.sort(list,newComparator&g…

  • 关于OpenProcessToken「建议收藏」

    关于OpenProcessToken「建议收藏」OpenProcessToken  要对一个任意进程(包括系统安全进程和服务进程)进行指定了写相关的访问权的OpenProcess操作,只要当前进程具有SeDeDebug权限就可以了。要是一个用户是Administrator或是被给予了相应的权限,就可以具有该权限。可是,就算我们用Administrator帐号对一个系统安全进程执行OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessID)还是会遇到“访问拒绝”的错误。什么原因呢?原来在默认的情况下进程的一些访问权限

  • Nginx简单配置转发

    问题分析一台服务器运行多个项目的时候会遇到这样的问题:如果使用同一个tomcat来启动不同项目的话,项目之间会相互影响;如果用多个tomcat运行项目,那么在访问项目的时候又不能都使用80端口,还要加上端口号,显得很麻烦又不美观。考虑用Nginx实现转发,目标是通过访问不同的域名实现对不同tomcat上运行的项目的跳转,例如访问www.a.com跳转到本地的8088端口的项目,访问www…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号