- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
武汉光迅笔试题武汉光迅笔试题
Linux进程间的通信有哪几种?请简要概述
一.管道(pipe)
管道是Linux支持的最初IPC方式,管道可分为无名管道,有名管道等。
(一)无名管道,它具有几个特点:
1)? 管道是半双工的,只能支持数据的单向流动;两进程间需要通信时需要建立起两个管道;
2)? 无名管道使用pipe()函数创建,只能用于父子进程或者兄弟进程之间;
3)? 管道对于通信的两端进程而言,实质上是一种独立的文件,只存在于内存中;
4)? 数据的读写操作:一个进程向管道中写数据,所写的数据添加在管道缓冲区的尾部;另一个进程在管道中缓冲区的头部读数据。?
(二)有名管道
有名管道也是半双工的,不过它允许没有亲缘关系的进程间进行通信。具体点说就是,有名管道提供了一个路径名与之进行关联,以FIFO(先进先出)的形式存在于文件系统中。这样即使是不相干的进程也可以通过FIFO相互通信,只要他们能访问已经提供的路径。
值得注意的是,只有在管道有读端时,往管道中写数据才有意义。否则,向管道写数据的进程会接收到内核发出来的SIGPIPE信号;应用程序可以自定义该信号处理函数,或者直接忽略该信号。二.信号量(semophore)
信号量是一种计数器,可以控制进程间多个线程或者多个进程对资源的同步访问,它常实现为一种锁机制。实质上,信号量是一个被保护的变量,并且只能通过初始化和两个标准的原子操作(P/V)来访问。(P,V操作也常称为wait(s),signal(s))?
三.信号(Signal)
信号是Unix系统中使用的最古老的进程间通信的方法之一。操作系统通过信号来通知某一进程发生了某一种预定好的事件;接收到信号的进程可以选择不同的方式处理该信号,一是可以采用默认处理机制—进程中断或退出,一是忽略该信号,还有就是自定义该信号的处理函数,执行相应的动作。
内核为进程生产信号,来响应不同的事件,这些事件就是信号源。信号源可以是:异常,其他进程,终端的中断(Ctrl-C,Ctrl+\等),作业的控制(前台,后台进程的管理等),分配额问题(cpu超时或文件过大等),内核通知(例如I/O就绪等),报警(计时器)。四.消息队列(Message Queue)
消息队列就是消息的一个链表,它允许一个或者多个进程向它写消息,一个或多个进程向它读消息。Linux维护了一个消息队列向量表:msgque,来表示系统中所有的消息队列。
消息队列克服了信号传递信息少,管道只能支持无格式字节流和缓冲区受限的缺点。?
五.共享内存(shared memory)
共享内存映射为一段可以被其他进程访问的内存。该共享内存由一个进程所创建,然后其他进程可以挂载到该共享内存中。共享内存是最快的IPC机制,但由于linux本身不能实现对其同步控制,需要用户程序进行并发访问控制,因此它一般结合了其他通信机制实现了进程间的通信,例如信号量。六.套接字(socket)
socket也是一种进程间的通信机制,不过它与其他通信方式主要的区别是:它可以实现不同主机间的进程通信。一个套接口可以看做是进程间通信的端点(endpoint),每个套接口的名字是唯一的;其他进程可以访问,连接和进行数据通信。
long?__cdecl?atol(??
??????????????????const?char?*nptr??
??????????????????)? //1.const修饰
{??
????int?c;??????????/*?current?char?*/??
????long?total;?????/*?current?total?*/??
????int?sign;???????/*?if?-,?then?negative,?otherwise?positive?*/??
??
????/*?skip?whitespace?*/?
//char ,signed char 、unsigned char 类型的数据具有相同的特性然而当你把一个单字节的数赋给一个整型数时,便会看到它们在符号扩展上的差异。
//ascii码当赋给整形数时要转为unsigned char再转为int
????while?(?isspace((int)(unsigned?char)*nptr)?)? //2.去掉首部的空格
????????++nptr;??
??
????c?=?(int)(unsigned?char)*nptr++;? //取得第一个非空格的字符
????sign?=?c;?/*?save?sign?indication?*/??
????if?(c?==?-?||?c?==?+)? //如果第一个非空格字符为符号
????????c?=?(int)(unsigned?char)*np
您可能关注的文档
最近下载
- PRS-7000_220KV型数字变电站自动化系统技术使用说明书.pdf VIP
- 国开电大《个人与团队管理》(试卷号22269)机试试题.pdf
- 2024广东统招专升本《大学语文》全书知识点汇总课件.pdf
- 虫害控制程序(SSOP).doc VIP
- 2025届【九省联考】全国高三10月联考数学答案.docx
- 滥竽充数-完整版PPT课件.ppt
- 2024华医网继续教育护理多学科协作,为老年外科患者保驾护航题库答案.docx VIP
- 冀教版小学数学五年级上册7.3《土地资源问题》说课PPT(共21张PPT).pptx VIP
- 嵌入式技术入门与实战(基于STM32)全套教学课件.pptx
- 2024年煤炭销售绩效考核办法.pdf VIP
文档评论(0)