qiuri2008

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  1127 随笔 :: 0 文章 :: 84 评论 :: 321万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

随笔分类 -  linux IPC 通信

1

linux IPC
摘要:如果一个应用程序去处理多个设备,例如应用程序读取网路数据,按键,串口,一般能想到的有三种方法: 方法1:串行+阻塞的方式读取:while(1) { read(标准输入);read(网络);}缺点:每当阻塞读取标准输入时,如果用户不进行标准输入的操作,而此时客户端给服务器发送数据,导致服务器无法读取客 阅读全文
posted @ 2019-10-23 18:26 江召伟 阅读(1634) 评论(0) 推荐(0) 编辑

摘要:前言 本章节是用基本的Linux/Unix基本函数加上select调用编写一个完整的服务器和客户端例子,可在Linux(ubuntu)和Unix(freebsd)上运行,客户端和服务端的功能如下: 客户端从标准输入读入一行,发送到服务端 服务端从网络读取一行,然后输出到客户端 客户端收到服务端的响应 阅读全文
posted @ 2018-04-29 22:34 江召伟 阅读(328) 评论(0) 推荐(0) 编辑

摘要:首先需要了解的是select函数: select函数 #include<sys/select.h> #include<sys/time.h> int select (int maxfd , fd_set *readset ,fd_set *writeset, fd_set *exceptionset 阅读全文
posted @ 2018-04-29 22:33 江召伟 阅读(233) 评论(0) 推荐(0) 编辑

摘要:poll函数 在上文unix下网络编程之I/O复用(二)中已经介绍了select函数的相关使用,本文将介绍另一个常用的I/O复用函数poll。poll提供的功能与select类似,不过在处理流设备时,它能够提供额外的信息。 poll函数原型: 1 2 3 #include<poll.h> int p 阅读全文
posted @ 2018-04-29 22:30 江召伟 阅读(254) 评论(0) 推荐(0) 编辑

摘要:什么是I/O复用? What we need is the capability to tell the kernel that we want to be notified if one or more I/O conditions are ready (i.e., input is ready 阅读全文
posted @ 2018-04-29 22:19 江召伟 阅读(337) 评论(0) 推荐(0) 编辑

摘要:一、IPC(Inter-Process Communication,进程间通信)对象的介绍 System V 的IPC对象有共享内存、消息队列、信号灯。 注意:在IPC的通信模式下,不管是使用消息队列还是共享内存,甚至是信号灯,每个IPC的对象都有唯一的名字,称为"键"(key)。通过"键",进程能 阅读全文
posted @ 2016-06-04 14:29 江召伟 阅读(541) 评论(0) 推荐(0) 编辑

摘要:在linux进程间通信的方式中,共享内存是一种最快的IPC方式。因此,共享内存用于实现进程间大量的数据传输,共享内存的话,会在内存中单独开辟一段内存空间,这段内存空间有自己特有的数据结构,包括访问权限、大小和最近访问的时间等。 为什么说共享内存是最快的一种IPC方式呢?让我们一起来看一下下面的这张图 阅读全文
posted @ 2016-06-04 14:27 江召伟 阅读(832) 评论(0) 推荐(0) 编辑

摘要:内存映射 为什么要进行进程间的通讯(IPC (Inter-process communication)) 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。通知事件:一个进程需要向 阅读全文
posted @ 2016-06-04 14:18 江召伟 阅读(361) 评论(0) 推荐(0) 编辑

摘要:每个进程各自有不同的用户地址空间,任何一个进 程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲 区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communica 阅读全文
posted @ 2016-06-04 14:15 江召伟 阅读(581) 评论(0) 推荐(0) 编辑

摘要:下面将讲解进程间通信的另一种方式,使用共享内存。 一、什么是共享内存 顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中 阅读全文
posted @ 2015-01-15 16:47 江召伟 阅读(930) 评论(0) 推荐(0) 编辑

摘要:前面我们学习了一下进程,我们知道多,进程间的地址空间相对独立。进程与进程间不能像线程间通过全局变量通信。 如果想进程间通信,就需要其他机制。 常用的进程间通信方式有这几种 A.传统的进程间通信方式 匿名管道(pipe)、有名管道(fifo)和信号(signal) B.System v IPC对象 共 阅读全文
posted @ 2015-01-15 15:00 江召伟 阅读(244) 评论(0) 推荐(0) 编辑

摘要:本文将阐述一下信号量的作用及经典例子,当中包括“《越狱》寄信”,“家庭吃水果”,“五子棋”,“接力赛跑”,“读者写者”,“四方恋爱”等 首先,讲 semWait操作(P操作)和semSignal操作(V操作)的一些基本原则。(接下来同意称为P,V操作) 1. P操作,s - -,if(s<0)阻塞自 阅读全文
posted @ 2015-01-07 09:53 江召伟 阅读(992) 评论(0) 推荐(0) 编辑

摘要:注:本分类下文章大多整理自《深入分析linux内核源代码》一书,另有参考其他一些资料如《linux内核完全剖析》、《linux c 编程一站式学习》等,只是为了更好地理清系统编程和网络编程中的一些概念性问题,并没有深入地阅读分析源码,我也是草草翻过这本书,请有兴趣的朋友自己参考相关资料。此书出版较早 阅读全文
posted @ 2015-01-05 13:34 江召伟 阅读(362) 评论(0) 推荐(0) 编辑

摘要:一、Posix信号量1.Posix信号量分为两种:1.有名信号量:使用Posix IPC名字标识(有名信号量总是既可用于线程间的同步,又可以用于进程间的同步)2.内存信号量:存放在共享内存区中(基于内存的信号量则必须在创建时指定成是否在进程间共享,且在所有进程的共享内存区,具有随进程的持续性)Pos... 阅读全文
posted @ 2015-01-05 10:59 江召伟 阅读(1106) 评论(0) 推荐(0) 编辑

摘要:信号量是一种用于提供不同进程间或一个给定进程的不同线程间同步手段的原语。linux提供两种信号量,“内核信号量”和“用户态进程信号量”,“用户态信号量”又分为“Posix”,“System V”信号量。今天我们主要讲解Posix信号量,Posix分为 有名/无名(又称匿名/内存信号量):1、Posi... 阅读全文
posted @ 2015-01-04 20:04 江召伟 阅读(1020) 评论(0) 推荐(0) 编辑

摘要:NAME syscall - 间接系统调用 SYNOPSIS #define _GNU_SOURCE #include <unistd.h> #include <sys/syscall.h> /* For SYS_xxx definitions */ int syscall(int number, 阅读全文
posted @ 2014-12-29 19:41 江召伟 阅读(19953) 评论(0) 推荐(0) 编辑

摘要:NAMEmq_overview —— POSIX消息队列概述DESCRIPTIONPOSIX消息队列允许进程以消息的形式交换数据。此API与System V消息队列(msgget(2),msgsnd(2),msgrcv(2)等)有明显不同,但做的事情差不多。消息队列通过mq_open(3)创建和打开... 阅读全文
posted @ 2014-11-29 14:20 江召伟 阅读(1492) 评论(0) 推荐(0) 编辑

摘要:管道和FIFO管道(pipe) 管道在Unix及Linux进程间通信是最基础的,很容易理解。管道就像一个自来水管,一端注入水,一端放出水,水只能在一个方向上流动,而不能双向流动。管道是典型的单向通信,即计算机网络中所说的“半双工”。管道又名匿名管道,所以只能用在具有公共祖先的进程之间使用,通常使用在... 阅读全文
posted @ 2014-11-28 11:14 江召伟 阅读(475) 评论(0) 推荐(0) 编辑

摘要:消息队列一、函数mq_open头文件mqueue.h;原型mqd_t mq_open(const char *name, int oflag, .../*mode_t mode,struct mq_attr* attr*/);函数功能创建消息队列;参数name:消息队列的名字,根据消息队列的规则,为... 阅读全文
posted @ 2014-11-19 22:40 江召伟 阅读(1271) 评论(0) 推荐(0) 编辑

摘要:前言: 消息队列是消息的链接表,存放在内核中,并由消息队列标识符标识。我们将称消息队列为“队列”,其标识符为“队列ID”。msgget创建一个新队列或打开一个存在的队列; msgsnd向队列末端添加一条新消息; msgrcv从队列中取消息, 获取消息是不一定遵循先进先出的, 也可以按消息的类型字段... 阅读全文
posted @ 2014-11-13 16:06 江召伟 阅读(706) 评论(0) 推荐(0) 编辑

1
点击右上角即可分享
微信分享提示