c - 如何与其他进程共享现有的 char *?

标签 c memory posix share

我正在尝试使用 shmgetshmat 与其他 forked+execed 进程共享一些内存:

char test[]="test";
int shID;
char *shptr;
key_t shkey = 2404;

shID = shmget(shkey, sizeof(char)*(strlen(test)+1), IPC_CREAT | 0666);
if (shID >= 0) {
    shptr = shmat(shID, 0, 0);
    if (shptr==(char *)-1) {
        perror("shmat");
    } else {
        memcpy(shptr, &test, strlen(test)+1);
        ....
        //forking and execing
        ....
        shmdt(shptr);
    }
} else {
    perror("shmget");
}

这很好用。

问题是 test[] 将是一个巨大的 char*。所以我喜欢轻松分享 text[] 而不是复制它。有没有更好的方法来处理这个问题?

最佳答案

如果您可以读取文件大小或要从文件和位置读取的确切内存,则可以使用 mmap 将文件的那部分映射到内存。

关于c - 如何与其他进程共享现有的 char *?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18946281/

相关文章:

在 C 中从特定索引动态复制字符串

c - C语言中的 ':-!!'是什么?

java - java 或 C++ 中的堆管理器如何跟踪线程或进程使用的所有内存位置?

performance - 为什么使用外部循环比使用内部循环更快地迭代外部维度?

c++ - 使用 timer_create 传递用户数据

c - 限制C中一个文件内全局变量的范围

c - 如何在flutter中运行c静态链接库(.a存档)?

类型转换指针?

c - 是否可以从 FILE* 中拯救文件描述符?

c - c中父子共享内存