Linux 提供了多种进程间通信(IPC, Inter-Process Communication)机制,每种机制适用于不同场景。以下是主要的 IPC 方式及其实现方法:
实现:
int fd[2];
pipe(fd); // fd[0]读端, fd[1]写端
if (fork() == 0) { // 子进程
close(fd[0]);
write(fd[1], "Hello", 6);
} else { // 父进程
close(fd[1]);
char buf[10];
read(fd[0], buf, sizeof(buf));
}
实现:
# 创建FIFO文件
mkfifo /tmp/myfifo
// 进程A(写)
int fd = open("/tmp/myfifo", O_WRONLY);
write(fd, "Data", 5);
// 进程B(读)
int fd = open("/tmp/myfifo", O_RDONLY);
read(fd, buf, sizeof(buf));
shmget()
shmat()
shmdt()
shmctl()
msgget()
创建/获取队列msgsnd()
发送消息msgrcv()
接收消息c
semget(key, 1, IPC_CREAT|0666); // 创建
semop(semid, &sembuf, 1); // P/V操作
SIGINT
、SIGUSR1
)c
signal(SIGUSR1, handler); // 注册信号处理函数
kill(pid, SIGUSR1); // 发送信号
本地套接字示例:
sockaddr_un addr;
addr.sun_family = AF_UNIX;
strcpy(addr.sun_path, "/tmp/mysock");
bind(sockfd, (struct sockaddr*)&addr, sizeof(addr));
c
void *addr = mmap(NULL, length, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
机制 | 适用场景 | 速度 | 复杂度 |
---|---|---|---|
管道 | 父子进程简单通信 | 快 | 低 |
共享内存 | 大数据量高频通信 | 最快 | 中 |
消息队列 | 结构化消息传递 | 中 | 中 |
Socket | 跨网络或复杂通信 | 慢 | 高 |
ipcs
查看,ipcrm
删除)mq_open()
、sem_open()
)fcntl()
)需要具体代码示例或更深入解释某个机制可以告诉我!