首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用shmdt()后无法删除共享内存段

调用shmdt()后无法删除共享内存段
EN

Stack Overflow用户
提问于 2017-05-31 11:45:35
回答 1查看 549关注 0票数 0

我成功地调用了shmdt(),但是共享内存段不能被删除。

这是我的密码:

代码语言:javascript
复制
#include <sys/types.h>
#include <sys/shm.h>
#include <errno.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

int main() {
    key_t key = ftok(".", 'T');
    if (key == -1) {
        fprintf(stderr, "get key failed, error: %s\n", strerror(errno));
        exit(1);
    }

    int shmid = shmget(key, sizeof(int) * 10, IPC_CREAT);
    if (shmid == -1) {
        fprintf(stderr, "get shmid failed, error: %s\n", strerror(errno));
        exit(1);
    }

    void* shmaddr = shmat(shmid, NULL, 0);
    if (shmaddr == (void*)-1) {
        fprintf(stderr, "get shmaddr failed, error: %s\n", strerror(errno));
        exit(1);
    }

    if (shmdt(shmaddr) == -1) {
        fprintf(stderr, "detach failed, error: %s\n", strerror(errno));
        exit(1);
    }

    return 0;
}

之后,我执行ipcs -m

代码语言:javascript
复制
# ipcs -m

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x00000000 1179648    root       0          4          0                       
0x00000000 1212417    root       0          4          0                       
0x00000000 1245186    root       0          4          0                       
0x00000000 1277955    root       0          4          0                       
0x00000000 1310724    root       0          4          0                       
0x00000000 1343493    root       0          4          0                       
0x00000000 1376262    root       0          4          0                       
0x00000000 1409031    root       0          4          0                       
0x00000000 1441800    root       0          4          0                       
0x00000000 1474569    root       0          4          0                       
0x54010004 1671178    root       0          40         0                       
0x00000000 1540107    root       0          4          0  
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-31 12:15:00

shmdt()将位于shmaddr指定地址的共享内存段与调用进程的地址空间分离。要分离的段当前必须使用shmaddr附加,该值等于附加shmat()调用返回的值。

将调用进程从附加内存中分离出来。它将而不是移除由进程创建的共享内存。

有关更多信息,请阅读相应系统调用的手册页。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44283900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档