Linux下实现map数据进程间共享

Linux下实现map数据进程间共享,第1张

简单的实现,没有添加同步机制,回头再添加上去,而且,我是在不同终端里面写的,你可以把两段代码,一个放到父进程,一个放到子进程...就可以了

你说的这些API,自己man 一次,看看说明就知道用法了....

楼上说的对齐的问题,我没有太注意..不过,不管你要共享什么,一个sizeof看看大小,一个memcpy拷贝,你就作为数据直接拷贝到共享内存区域就OK了...另外一边再拷贝回来,用一个结构体类型的指针指向你拷贝回来的数据,不就给这部分内存再规划成一个结构体了。。

至于具体的, KEY 的含义,你需要了解linux的ipc机制。

#include<stdio.h>

#include<sys/ipc.h>

#include<sys/types.h>

#include<sys/shm.h>

#define BUF_SIZE 100

#define KEY 99

int main(void)

{

int shmid

char *shmptr

shmid=shmget(99,BUF_SIZE,IPC_CREAT|0666)

if(shmid==-1)

{

printf("Shared Memory Created error...\n")exit(0)

}

shmptr=shmat(shmid,NULL,0)

if(shmptr==(void*)-1)

{

printf("shmat error,shmptr= %d \n",shmptr)

exit(1)

}

while(1)

{

printf("type strings into Shared Memory:")

fgets(shmptr,BUF_SIZE,stdin)

}

return 0

}

下面这段就每隔10秒钟扫描共享内存区域的内容:

#include<stdio.h>

#include<sys/ipc.h>

#include<sys/types.h>

#include<sys/shm.h>

#define BUF_SIZE 100

#define KEY 99

int main(void)

{

int shmid

char *shmptr

shmid=shmget(99,BUF_SIZE,IPC_CREAT|0666)

if(shmid==-1)

{

printf("Shared Memory Created error...\n")exit(0)

}

shmptr=shmat(shmid,NULL,0)

if(shmptr==(void*)-1)

{

printf("shmat error,shmptr= %d \n",shmptr)

exit(1)

}

while(1)

{

printf("Infomation in Shared Memory:")

printf("%s \n",shmptr)

sleep(10)

}

return 0

}

下面是读取一个文件 并复制成新文件

#include <string.h>

#include <strings.h>

#include <stdio.h>

#include <stdlib.h>

#define BUFFER_SIZE 1024

int main(int argc, char **argv)

{

FILE *from_fd

FILE *to_fd

long file_len = 0

char buffer[BUFFER_SIZE]

char *ptr

//判断传入参数

if(argc != 3)

{

printf("Usage: %s fromfile tofile", argv[0])

exit(1)//异常退出返回1

}

//打开原文件

if((from_fd = fopen(argv[1], "rb")) == NULL)

{

printf("Read %s Error\n", argv[1])

exit(1)

}

//创建目的文件

if((to_fd = fopen(argv[2], "wb")) == NULL)

{

printf("Write %s Error\n", argv[2])

exit(1)

}

//侧得文件大小

fseek(from_fd, 0L, SEEK_END)

file_len = ftell(from_fd)

fseek(from_fd, 0L, SEEK_SET)

printf("from file size is = %ld\n", file_len)

//进行文件拷贝

while(!feof(from_fd))

{

fread(buffer, BUFFER_SIZE, 1, from_fd)

//fread 为c标准库里函数 // read 为Linux系统调用, 返回成功读取了多少字节 出错则返回-1

if(BUFFER_SIZE >= file_len)

{

fwrite(buffer, file_len, 1, to_fd)

}

else

{

fwrite(buffer, BUFFER_SIZE, 1, to_fd)

file_len = file_len - BUFFER_SIZE

printf("copy success!\n")

}

bzero(buffer, BUFFER_SIZE)

}

fclose(from_fd)

fclose(to_fd)

exit(0)//返回0 表示成功

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8326894.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存