进程间通信与网络编程技术详解
1. 消息队列与共享内存
消息队列是一种重要的进程间通信(IPC)机制。在消息队列的发送和接收操作中,以 mq_send
和 mq_receive
为例,当用户 1 进程调用 mq_send
时,Linux 内核会将待发送的消息从用户空间复制到内核空间;当用户 2 进程调用 mq_receive
时,内核又会将消息从内核空间复制到用户空间。
消息队列的原子性与消息大小有关。如果消息小于 pipe_BUF
,消息的传递能保证原子性;否则,开发者需要提供同步机制。此外, perror
方法能以描述性格式输出最后一个错误( errno
),方便开发者调试。
共享内存是一种无需内核作为进程间中介的快速 IPC 方式。下面我们通过一个简单的聊天应用来介绍如何使用 POSIX 共享内存 API:
#include <stdio.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#define STORAGE_ID1 "/SHM_USER1"
#define STORAGE_ID2 "/SHM_USER2"
#define STORAGE_SIZE 32
int main(int argc, char *arg