欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > linux共享内存通信

linux共享内存通信

2025/12/1 15:00:14 来源:https://blog.csdn.net/2302_80283616/article/details/147311940  浏览:    关键词:linux共享内存通信
基础共享内存通信示例

以下示例展示生产者-消费者模型,使用共享内存传递数据:

生产者程序(producer.c)
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
#include <string.h>#define SHM_KEY 0x1234
#define SHM_SIZE 1024int main() {int shmid = shmget(SHM_KEY, SHM_SIZE, IPC_CREAT | 0666);if (shmid == -1) {perror("shmget");return 1;}char *shm_ptr = (char*)shmat(shmid, NULL, 0);if (shm_ptr == (void*)-1) {perror("shmat");return 1;}strcpy(shm_ptr, "Hello from producer!");printf("Producer wrote: %s\n", shm_ptr);shmdt(shm_ptr);return 0;
}
消费者程序(consumer.c)
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>#define SHM_KEY 0x1234
#define SHM_SIZE 1024int main() {int shmid = shmget(SHM_KEY, SHM_SIZE, 0666);if (shmid == -1) {perror("shmget");return 1;}char *shm_ptr = (char*)shmat(shmid, NULL, 0);if (shm_ptr == (void*)-1) {perror("shmat");return 1;}printf("Consumer read: %s\n", shm_ptr);shmdt(shm_ptr);shmctl(shmid, IPC_RMID, NULL); // 删除共享内存return 0;
}
编译与运行
# 编译
gcc producer.c -o producer
gcc consumer.c -o consumer# 运行生产者
./producer
# 输出: Producer wrote: Hello from producer!# 运行消费者
./consumer
# 输出: Consumer read: Hello from producer!

(通过 ipcs -m 查看共享内存)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词