勇敢心资源网

当前位置:首页 > 百科 / 正文

sys/ipc.h

(2020-02-08 04:32:23) 百科

sys/ipc.h

sys/ipc.h是一种通讯格式,可在2个(多数情况下)或多个进程间传递信息。

基本介绍

  • 中文名:进程间通讯
  • 格式:sys/ipc.h
  • 档案形式:由进程自己决定
  • 性质:通讯格式

进程间通讯(IPC)头档案

所谓进程间通讯,顾名思义,方法大致如下几种:
1, 档案(file),匿名管道(anonymous pipe),命名管道(named pipe),信号(signal).
2、 System V IPC 包括讯息伫列(message queue),共享记忆体(shared memory),信号量(semaphore)。这种形式的ipc首先在UNIX分支system V中使用,现在多数unix系统都支持。

档案形式的IPC

进程(process) A写信息到档案1,进程B读档案1。档案的内容,由进程自己决定。

匿名管道

command1 args1 | command2 args2. 最常见的例子:ls ?l |more 由于管道操作由shell代替完成,没有产生有名字的实体,所以称为匿名管道。 Shell做的事情是调用pipe(),产生一个管道,然后把command1的输出连线到管道的输入端,把command2的输入连线到管道的输出端。

命名管道

首先,建立一个特殊档案,mkfifo pipe1或者mknod fifo1 p
然后,就当作正常档案读写pipe。
由于产生有名字的实体,所以被称为命名管道。

信号

简单的用法: kill ?USER2 pid,也就是通过kill()系统调用或者kill命令,传送信号到别的进程。各个进程对于信号的处理过程是自己定义的(除了Array,也就是KILL是强制的)。比如自己可以忽略HUP,TERM,INT(按control-C), 等。

讯息伫列(message queue)

讯息伫列,是一个伫列的结构,伫列里面的内容由用户进程自己定义。实际上,伫列里面记录的是指向用户自定义结构的指针和结构的大小。要使用message queue,首先要通过系统调用(msgget)产生一个伫列,然后,进程可以用msgsnd传送讯息到这个伫列,讯息就是如上所说的结构。别的进程用msgrcv读取。讯息伫列一旦产生,除非明确的删除(某个有许可权的进程或者用ipcrm命令)或者系统重启。否则,产生的伫列会一直保留在系统中。而且,只要有许可权,就可以对伫列进行操作。讯息伫列和管道很相似,实际上,管道就是用户讯息为1个位元组的伫列。

共享记忆体(shared memory)

共享记忆体是一段可以被多个进程共享的记忆体段。首先,用shmget系统调用产生指定大小的共享记忆体段,然后需要访问此共享记忆体的进程调用shmat系统调用,把这个记忆体段附加到自己的地址空间,然后就可以像访问自己私有的记忆体一样访问这个记忆体段了。等到访问完毕,用shmdt脱离。同message queue一样,共享记忆体一旦产生,除非明确的删除(某个有许可权的进程或者用ipcrm命令)或者系统重启。否则,产生的共享记忆体会一直保留在系统中。而且,只要有许可权,就可以对共享记忆体进行操作。共享记忆体的内容由进程自己定义。为了防止多个进程在同一时间写同样一段共享记忆体,一般程式会使用信号量来控制对某一段地址的读写。

信号量(semaphore)

在作业系统中,有些资源数量是有限的,在同一时间,只能由有限(一个或几个)的进程使用和访问。例如磁带机,同一时间,只能由一个进程使用。这样的资源被称为关键(critical)资源。信号量就是用来记录关键资源的使用情况的。首先,利用系统调用semget产生一个信号量。当需要使用关键资源时,调用semop,传递的参数为需要使用的资源的数量,例如2个,参数就为+2。如果这个资源有2个或者更多可用,进程就获得了使用权,否则就必须等待,直到有足够的资源可用。当进程使用资源结束的时候,也用semop释放关键资源。参数为需要释放的数量,例如2,参数为-2。同message queue一样,信号量一旦产生,除非明确的删除(某个有许可权的进程或者用ipcrm命令)或者系统重启。否则,信号量会一直保留在系统中。而且,只要有许可权,就可以对其进行操作。
声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:baisebaisebaise@yeah.net
搜索
随机推荐

勇敢心资源网|豫ICP备19027550号