在Debian系统中,进程间通信(IPC)可以通过多种方式实现。以下是一些常见的IPC方法:
# 创建一个命名管道
mkfifo my_pipe
# 写入数据到管道
echo "Hello" > my_pipe
# 从管道读取数据
cat my_pipe
# 安装msgget, msgsnd, msgrcv工具
sudo apt-get install msgget msgsnd msgrcv
# 创建消息队列
msgget -m 0666 -M 0666 my_queue
# 发送消息
echo "Hello" | msgsnd -m 0666 -M 0666 my_queue
# 接收消息
msgrcv -m 0666 -M 0666 my_queue
# 安装shmget, shmat, shmdt工具
sudo apt-get install shmget shmat shmdt
# 创建共享内存段
shmget -m 0666 -M 0666 1024
# 附加共享内存段
shmat -m 0666 -M 0666 1024
# 分离共享内存段
shmdt /dev/shm/shmXXXXX
#include <signal.h>
#include <stdio.h>
void handler(int signum) {
printf("Received signal %d\n", signum);
}
int main() {
signal(SIGINT, handler);
while (1) {
// 主循环
}
return 0;
}
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
#include <stdio.h>
int main() {
int sockfd;
struct sockaddr_un addr;
sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
if (sockfd < 0) {
perror("socket");
return 1;
}
addr.sun_family = AF_UNIX;
strcpy(addr.sun_path, "/tmp/uds_example");
unlink("/tmp/uds_example"); // 删除已存在的套接字文件
bind(sockfd, (struct sockaddr*)&addr, sizeof(addr));
listen(sockfd, 5);
int clientfd = accept(sockfd, NULL, NULL);
char buffer[1024];
read(clientfd, buffer, sizeof(buffer));
printf("Received: %s\n", buffer);
close(clientfd);
close(sockfd);
return 0;
}
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdio.h>
int main() {
int sockfd;
struct sockaddr_in servaddr, cliaddr;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
memset(&servaddr, 0, sizeof(servaddr));
memset(&cliaddr, 0, sizeof(cliaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = INADDR_ANY;
servaddr.sin_port = htons(8080);
bind(sockfd, (const struct sockaddr*)&servaddr, sizeof(servaddr));
listen(sockfd, 10);
int len = sizeof(cliaddr);
int n = accept(sockfd, (struct sockaddr*)&cliaddr, &len);
char buffer[1024];
read(n, buffer, sizeof(buffer));
printf("Received: %s\n", buffer);
close(n);
close(sockfd);
return 0;
}
# 安装semget, semop, semctl工具
sudo apt-get install semget semop semctl
# 创建信号量集
semget -m 0666 -M 0666 1
# 初始化信号量
semctl -m 0666 -M 0666 1 1
# 执行P操作(等待)
semop -m 0666 -M 0666 -P 1
# 执行V操作(释放)
semop -m 0666 -M 0666 -V 1
选择合适的IPC方法取决于具体的应用场景和需求。例如,共享内存适用于大量数据的快速传输,而消息队列则更适合于异步通信和解耦系统组件。
辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
推荐阅读: Debian GCC如何进行跨平台编译