c++ - shmdt后共享内存没有被删除

【字号: 日期:2023-03-17浏览:28作者:雯心

问题描述

代码如下,我执行了shmdt并且成功了,但是ipcs -m查看了一下,并没有被删除

计数为0后不是会被自动删除的么?

#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: %sn', strerror(errno));exit(1); } int shmid = shmget(key, sizeof(int) * 10, IPC_CREAT); if (shmid == -1) {fprintf(stderr, 'get shmid failed, error: %sn', strerror(errno));exit(1); } void* shmaddr = shmat(shmid, NULL, 0); if (shmaddr == (void*)-1) {fprintf(stderr, 'get shmaddr failed, error: %sn', strerror(errno));exit(1); } if (shmdt(shmaddr) == -1) {fprintf(stderr, 'detach failed, error: %sn', strerror(errno));exit(1); } return 0;}

# ipcs -m------ Shared Memory Segments --------keyshmid 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

问题解答

回答1:

这个函数只是断开共享内存的连接,可以使用shmctl来删除共享内存。

相关文章: