Products
GG网络技术分享 2025-11-12 19:57 5
在Linux系统中,进程间传信是确保不同进程Neng够互相发送消息或共享数据的关键手艺。
管道是用于父子进程或兄弟进程间传信的一种机制。它是一个先进先出的数据流,数据在管道中以字节流的形式流动。

示例代码: c
int main { int pipefd; pid_t cpid;
if == -1) {
perror;
exit;
}
cpid = fork;
if {
perror;
exit;
}
if { // 子进程
close; // 关闭未用的写端
dup2; // 将标准输入沉定向到管道
execlp;
perror;
exit;
} else { // 父进程
close; // 关闭未用的读端
dup2; // 将标准输出沉定向到管道
execlp;
perror;
exit;
}
wait; // 等待子进程收尾
return 0;
}
命名管道允许非亲缘关系的进程传信,类似于文件系统中的文件。
int main { int pipefd; char *fifopath = "/tmp/my_fifo";
// 创建命名管道
if == -1) {
perror;
exit;
}
// 打开命名管道
if ) == -1) {
perror;
exit;
}
// 写入数据到命名管道
char *data = "Hello, FIFO!";
write);
// 关闭命名管道
close;
// 删除命名管道
if == -1) {
perror;
exit;
}
return 0;
消息队列允许进程间发送消息,个个消息有一个类型和一个数据有些。
// 定义消息结构 struct message { long msgtype; char msgtext; };
int main { key_t key; int msgid; struct message msg;
// 创建消息队列
key = ftok;
if ) == -1) {
perror;
exit;
}
// 发送消息
msg.msg_type = 1;
strcpy;
if , 0) == -1) {
perror;
exit;
}
// 删除消息队列
if == -1) {
perror;
exit;
}
return 0;
共享内存允许优良几个进程共享一块内存区域,用于数据交换。
int main { key_t key; int shmid; char *shmaddr;
// 创建共享内存
key = ftok;
if ) == -1) {
perror;
exit;
}
// 连接到共享内存
shmaddr = shmat;
if -1) {
perror;
exit;
}
// 向共享内存写入数据
strcpy;
// 解除连接
shmdt;
// 删除共享内存
if == -1) {
perror;
exit;
}
return 0;
信号是用于通知进程某个事件发生的一种机制。
void signal_handler { printf; }
int main { signal; pause; // 等待信号
return 0;
套接字是用于网络传信的进程间传信机制,Neng实现不同主机或同一主机上的进程间传信。
int main { int sock; struct sockaddr_in servaddr;
// 创建套接字
if ) == -1) {
perror;
exit;
}
// 设置服务器地址
memset);
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons;
servaddr.sin_addr.s_addr = htonl;
// 绑定套接字
if &servaddr, sizeof) == -1) {
perror;
exit;
}
// 监听连接
if == -1) {
perror;
exit;
}
// 收下连接
int newsockfd;
socklen_t len = sizeof;
if &servaddr, &len)) == -1) {
perror;
exit;
}
// 发送数据
char *message = "Hello, server!";
send, 0);
// 关闭套接字
close;
close;
return 0;
这些个是Linux中常用的进程间传信机制。每种机制dou有其特定的用途和管束,所以呢选择合适的IPC机制对于编写高大效、可靠的程序至关关键。
Demand feedback