UNIX 如果查询一个共享内存已经被IPCRM,程序中如何操作保证安全
2012-12-05 23:20
441 查看
进程内可以用根据ipc_perm的mode成员SHM_DEST位进行判断
运行ipcs -m查看共享内存,,此时status为空
ipcs -m
------ Shared Memory Segments --------
key shmid
owner perms bytes nattch status
0x00bc614e 32768 root 666 1024 1
删除shmid为32768的共享内存,此时status为dest,而key变为0x00000000
ipcrm -m 32768
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 32768 root 666
1024 1 dest
输入字符,屏幕输出
destroy segment when # attached = 0 因为我们手工删除了共享内存,
#include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #include <stdio.h> int main(void) { key_t key; int id; size_t size; void *addr; int ch; struct shmid_ds buf; unsigned int mode; key = ftok("shm.key", 1); size = 1024; id = shmget(key, size, SHM_R | SHM_W | IPC_CREAT); addr = shmat(id, NULL, 0); while ((ch = getchar()) != EOF) { shmctl(id, IPC_STAT, &buf); mode = buf.shm_perm.mode; (void)printf("%o\n", (unsigned short)mode); #ifdef SHM_DEST if (SHM_DEST & mode) (void)printf("%s\n", "destroy segment when # attached = 0"); #endif } shmdt(addr); shmctl(id, IPC_RMID, NULL); return 0; }
运行ipcs -m查看共享内存,,此时status为空
ipcs -m
------ Shared Memory Segments --------
key shmid
owner perms bytes nattch status
0x00bc614e 32768 root 666 1024 1
删除shmid为32768的共享内存,此时status为dest,而key变为0x00000000
ipcrm -m 32768
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 32768 root 666
1024 1 dest
输入字符,屏幕输出
destroy segment when # attached = 0 因为我们手工删除了共享内存,
相关文章推荐
- 用MASM写一个简单的实现递归操作的汇编程序,所谓递归,上课已经跟大家说清楚了,如果我们只考虑简单的只分一次的递
- 技巧(5)- 如何让这个程序在系统里同时只运行一个(如果这个exe程序已经运行了,就不再运行)
- 如何检查程序内存泄露?如果不用工具,不用code review,如何检查?
- 在VC中实现一次执行一个进程,如果同时打开两个,则报该程序已经运行
- 20110327-8.3-warning-如果程序崩溃了,则不会刷新缓冲区,最好的方法是保证所有的输出操作都显式地调用了flush或endl
- 如何编写一个线程安全的程序或者函数库?
- 水区1、问:如何安慰一个胖子? 答:你的人生已经很圆满了。 2、问:如果有不认识的人加你Q,让我来告诉你怎么拒绝他。 神回复:照照镜子摸摸兜,条件够了再加Q。 3、问:你的妈妈是全天下最美的妈妈,
- Unix下如何写安全的C程序
- 激活前一个程序(注册全局消息,使用Mutex探测,如果已经占用就广播消息通知第一个程序,然后第一个程序做出响应)
- UNIX 编程技巧——如何 hook 一个共享库
- c#检查程序是否已经运行,如何防止多次运行同一个程序?
- Python:一个小小程序,如何分析unix是否安装了某个命令
- 在向服务器发送请求时发生传输级错误。 (provider: 共享内存提供程序, error: 1 - 执行读/写操作期间检测到 I/O 错误。)
- 如何保证IO重定向不会破坏一个已经存在的文件
- 11.38 CastleActiveRecord中如何保证多线程并发操作的安全与成功?
- 对于一颗完全二叉树,要求给所有节点加上一个pNext指针,指向同一层的相邻节点;如果当前节点已经是该层的最后一个节点,则将pNext指针指向NULL;给出程序实现,并分析时间复杂度和空间复杂度。
- 一个操作共享内存的类!可以方便的添加,删除数据,包括各种结构体!
- Unix下操作共享内存
- ASP.Net下如何解决关于Access数据库“操作必须使用一个可更新的查询”问题
- java程序中,如何安全的结束一个正在运行的线程?