您的位置首页>企业动态>

linux进程间通信方式

导读大家好,我是极客范的本期栏目编辑小友,现在为大家讲解linux进程间通信方式问题。共用存储器是多个进程共享的物理内存的一部分。共享内存

音频解说

大家好,我是极客范的本期栏目编辑小友,现在为大家讲解linux进程间通信方式问题。

共用存储器

是多个进程共享的物理内存的一部分。共享内存是进程间共享数据的最快方式。当一个进程将数据写入共享内存区时,共享内存区的所有进程都可以立即看到内容。

共享内存的实现分为两个步骤:

1.创建共享内存并使用shmget函数。

第二,映射共享内存,将创建的共享内存映射到特定的进程空间,使用shmat函数。

当一个进程不再需要共享内存时,它需要与进程地址空间分离。

intshmdt(char*shmaddr)

信息排队

早期unix通信机制之一的signal只能传输有限的信息,而管道只能传输未格式化的字节流,这无疑会给应用开发带来不便。消息队列(也称为消息队列)克服了这些缺点。

发展

消息队列是消息的链接列表。您可以将消息视为具有特定格式的记录。该过程可以根据某些规则向添加新消息;其他进程可以从消息队列中读取消息。

目前,消息队列主要有两种类型:

目前广泛使用的是POSIX消息队列和系统V消息队列。

系统V消息队列在内核中是持久的,只有在内核重启或手动删除时才会被删除。

键值

消息队列的内核持久性要求每个消息队列对应于系统中唯一的键值。因此,要获得消息队列的描述字,必须提供消息队列的键值。

在以下两种情况下,会创建一个新的消息队列:

1.如果没有与关键字对应的消息队列,并且msgflg包含IPC_CREAT标志。

2.关键参数是IPC_PRIVATE。

文件

包括# include # includeintmsgsnd(intmsqid,structmsgbuf*msgp,intmsgsz,intmsgflg

功能:向消息队列发送消息。

Msqid:打开的消息队列id。

Msgp:存储消息的结构。

Msgsz:消息数据长度。

Msgflg:

发送标志,有意义的msgflg标志是IPC_NOWAIT,它指示当消息队列没有足够的空间容纳要发送的消息时,msgsnd是否会等待。

消息格式

structmsgbuf { longmtypecharm text[1];} *接收消息* # include # include # include intmsgrcv(intmsqid,structmsgbuf*msgp,intmsgsz,longmsgtyp,intmsgflg)。

功能:

从msqid表示的消息队列中读取一条msgtyp消息,并将该消息存储在msgp指向的msgbuf结构中。成功读取消息后,队列中的消息将被删除。

旗语

信号量(也称为信号灯)不同于其他进程间通信方法,其主要目的是保护关键资源。

根据它,进程可以确定它是否可以访问一些共享资源。除了访问控制,它还可以用于进程同步。

分类

二进制信号灯:信号灯的值只能取0或1,类似互斥锁。但它们是不同的:

强调信号灯的共享资源。只要共享资源可用,其他进程也可以修改信号灯的值。

互斥锁强调进程,进程本身在用完资源后必须解锁。

计数信号灯:信号灯的值可以取任意非负值。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。