Linux 共享内存
在Linux中,共享内存是一种进程间通信的机制,可以使不同进程之间共享同一块物理内存区域。
以下是在Linux中使用共享内存的步骤:
写入共享内存:
#include <stdio.h>
#include <sys/types.h>
#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#define SHMGET_SIZE 1024
int main(){
char str_buff[1024];
//1、生成一个键值 ftok("文件名和路径", '低于八位的标识符');
key_t ftok_key=ftok("./share", 'a');
if (ftok_key == -1)
{
perror("ftok");
exit(1);
}
//2、创建共享内存
int shmage_id=shmget(ftok_key, SHMGET_SIZE, IPC_CREAT|0666);
if (shmage_id == -1)
{
perror("shmget");
exit(1);
}
//3、映射共享内存
char *shmat_add=(char *)shmat(shmage_id, NULL, 0);
if (shmat_add == (char *)(-1))
{
perror("shmat");
exit(1);
}
//4、写入共享内容
while (1)
{
fgets(str_buff, sizeof(str_buff), stdin);
strcpy(shmat_add, str_buff);
if (strncmp(shmat_add, "quit", 4) == 0)
{
printf("正在退出......\n");
sleep(1);
break;
}
}
return 0;
}
读内存
#include <stdio.h>
#include <sys/types.h>
#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#define SHMGET_SIZE 1024
int main(){
char str_buff[1024];
//1、生成一个键值
key_t ftok_key=ftok("./share", 'a');
if (ftok_key == -1)
{
perror("ftok");
exit(1);
}
//2、创建共享内存
int shmage_id=shmget(ftok_key, SHMGET_SIZE, IPC_CREAT|0666);
if (shmage_id == -1)
{
perror("shmget");
exit(1);
}
//3、映射共享内存
char *shmat_add=(char *)shmat(shmage_id, NULL, SHM_RDONLY);
if (shmat_add == (char *)(-1))
{
perror("shmat");
exit(1);
}
//4、读共享内容
//这里做了优化 一般读内存 会一直去读 但是一直去读 可能会重复读取很多一样的内容
//使用strncmp去做比较 不同的时候才去拷贝内存的值
while (1)
{
//优化过的
if (strncmp(shmat_add, str_buff, 10) != 0) {
strcpy(str_buff, shmat_add); // 更新 str_buff
printf("%s", str_buff);
sleep(1);
}
if (strncmp(shmat_add, "quit", 4) == 0)
{
printf("正在退出......\n");
sleep(1);
break;
}
}
//5、不用了就分离接触
if (shmdt(shmat_add) == -1)
{
perror("shmdt");
return 1;
}
return 0;
}
原文地址:https://blog.csdn.net/m0_58341340/article/details/143660445
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!