LinuxC中进程通信
信号(Signals):Linux 提供了信号机制,允许一个进程向另一个进程发送信号以通知特定事件的发生。这是一种轻量级的通信机制,通常用于处理异步事件。您可以使用 kill 命令或 kill 函数来发送信号,然后使用信号处理函数捕获和处理信号。
管道(Pipes):管道是一种进程间通信机制,允许一个进程将数据发送给另一个进程。您可以使用 pipe 系统调用来创建一个管道,然后一个进程可以写入管道,另一个进程可以从管道中读取数据。
共享内存(Shared Memory):共享内存是一种高性能的进程间通信方式,允许多个进程访问同一块内存区域。您可以使用 shmget、shmat 等函数来创建和附加共享内存,不同进程可以在共享内存中读写数据。
消息队列(Message Queues):消息队列是一种进程间通信方式,允许一个进程将消息发送给另一个进程。您可以使用 msgget、msgsnd 和 msgrcv 函数来创建消息队列和发送/接收消息。
套接字(Sockets):套接字是一种用于网络通信的通用通信机制,但也可以用于本地进程间通信(本地套接字)。您可以使用套接字编程来实现进程间通信,允许进程通过网络或本地连接进行数据交换。
文件锁(File Locks):文件锁可以用于同步进程对文件的访问。多个进程可以使用文件锁来协调对共享文件的访问,以防止竞争条件。
事件驱动编程:您可以使用事件驱动编程模型,其中一个进程等待事件的发生,然后在事件发生时执行相关操作。
Linux共享内存
共享内存是指多个进程可以把一段内存共同的内存映射到自己的进程空间中,从而实现数据的共享和传输,它是存在与内核级别的一种资源,是所有进程间通信中方式最快的一种。
参考:
https://cloud.tencent.com/developer/article/1551288
https://zhuanlan.zhihu.com/p/331573872
https://developer.aliyun.com/article/2872
Linux消息队列
https://zhuanlan.zhihu.com/p/268389190
消息队列亦称报文队列,也叫做信箱。是Linux的一种通信机制,这种通信机制传递的数据具有某种结构,而不是简单的字节流。
消息队列的本质其实是一个内核提供的链表,内核基于这个链表,实现了一个数据结构
向消息队列中写数据,实际上是向这个数据结构中插入一个新结点;从消息队列汇总读数据,实际上是从这个数据结构中删除一个结点
消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法
消息队列也有管道一样的不足,就是每个数据块的最大长度是有上限的,系统上全体队列的最大总长度也有一个上限
Linux消息队列
消息队列亦称报文队列,也叫做信箱。是Linux的一种通信机制,这种通信机制传递的数据具有某种结构,而不是简单的字节流。
消息队列的本质其实是一个内核提供的链表,内核基于这个链表,实现了一个数据结构
向消息队列中写数据,实际上是向这个数据结构中插入一个新结点;从消息队列汇总读数据,实际上是从这个数据结构中删除一个结点。
消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法
消息队列也有管道一样的不足,就是每个数据块的最大长度是有上限的,系统上全体队列的最大总长度也有一个上限
学习:https://zhuanlan.zhihu.com/p/268389190
Linux事件驱动编程
事件驱动模型
目前大部分的UI编程都是事件驱动模型,如很多UI平台都会提供onClick()事件,这个事件就代表鼠标按下事件。事件驱动模型大体思路如下:
- 有一个事件(消息)队列;
- 鼠标按下时,往这个队列中增加一个点击事件(消息);
- 有个循环,不断从队列取出事件,根据不同的事件,调用不同的函数,如onClick()、onKeyDown()等;
例如:epoll