2.28共享内存(1)
共享内存

新的问题:两个进程同时写数据,一个进程读数据,涉及进程同步问题。
共享内存使用步骤

共享内存操作函数

头文件
#include <sys/ipc.h>
#include <sys/shm.h>
- shmget

- shmat

- shmdt

- shmctl

- ftok

2.29共享内存(2)
共享内存相关问题

共享内存和内存映射的区别

通过共享内存实现进程间通信
共享内存写数据
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <string.h>
int main() {
// 1.创建一个共享内存
int shmid = shmget(100, 4096, IPC_CREAT|0664);
printf("shmid : %d\n", shmid);
// 2.和当前进程进行关联
void * ptr = shmat(shmid, NULL, 0);
char * str = "helloworld";
// 3.写数据
memcpy(ptr, str, strlen(str) + 1);
printf("按任意键继续\n");
getchar();
// 4.解除关联
shmdt(ptr);
// 5.删除共享内存
shmctl(shmid, IPC_RMID, NULL);
return 0;
}
共享内存读数据
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <string.h>
int main() {
// 1.获取一个共享内存
int shmid = shmget(100, 0, IPC_CREAT);
printf("shmid : %d\n", shmid);
// 2.和当前进程进行关联
void * ptr = shmat(shmid, NULL, 0);
// 3.读数据
printf("%s\n", (char *)ptr);
printf("按任意键继续\n");
getchar();
// 4.解除关联
shmdt(ptr);
// 5.删除共享内存
shmctl(shmid, IPC_RMID, NULL);
return 0;
}
共享内存操作命令

文章介绍了如何在Linux环境下利用共享内存进行进程间通信,包括创建、关联、读写数据以及删除共享内存的步骤。示例代码展示了如何写入和读取共享内存中的数据,强调了同步问题的重要性。
36

被折叠的 条评论
为什么被折叠?



