Posix与System V共享内存函数区别

Posix标准
shm_open:打开或创建一个共享内存区
shm_unlink:删除一个共享内存区
ftruncate调整文件或共享内存区大小
sem_open:创建信号量
sem_wait:等待信号量
sem_post:发送信号量
sem_close:关闭信号量

System V标准
ftok:生成key
shmget:建立共享内存
shmdt:删除共享内存区
semget:创建信号量
semop:操作信号量
semctl:控制信号量

简单解释一下ipcs命令和ipcrm命令。
取得ipc信息:
ipcs [-m|-q|-s]
-m 输出有关共享内存(shared memory)的信息
-q 输出有关信息队列(message queue)的信息
-s 输出有关“遮断器”(semaphore)的信息
%ipcs -m

删除ipc
ipcrm -m|-q|-s shm_id
%ipcrm -m 105

SystemV代码删除:
semctl(m_sem_id,0, IPC_RMID);
shmctl(m_shm_id,IPC_RMID,NULL);

Linux感觉对SystemV要支持好一点,很多老版本都不支持Posix相关函数

时间: 2024-10-24 16:33:20

Posix与System V共享内存函数区别的相关文章

细说linux IPC(五):system V共享内存

system V共享内存和posix共享内存类似,system V共享内存是调用shmget函数和shamat函数.           shmget函数创建共享内存区,或者访问一个存在的内存区,类似系统调用共享内存的open和posix共享内存shm_open函数.shmget函数原型为: #include <sys/ipc.h> #include <sys/shm.h> int shmget(key_t key, size_t size, int shmflg); key: 函

阐述linux IPC(五岁以下儿童):system V共享内存

[版权声明:尊重原创.转载请保留源:blog.csdn.net/shallnet 要么 .../gentleliu,文章学习交流,不用于商业用途] system V共享内存和posix共享内存类似,system V共享内存是调用shmget函数和shamat函数. shmget函数创建共享内存区,或者訪问一个存在的内存区,类似系统调用共享内存的open和posix共享内存shm_open函数. shmget函数原型为: #include <sys/ipc.h> #include <sys

linux进程间通信之System V共享内存详解及代码示例

共享内存是最快最为高效的进程间通信方式,当共享内存映射到共享它的某个进程的地址空间后,进程间的数据传递就不再牵扯到内核,进程可以直接读取内核,不需要通过内核系统调用进行数据拷贝.一般使用情况,从共享内存中写入或读取数据的进程间需要做同步,例如通过信号量,互斥锁去同步. 共享内存有System V 共享内存和Posix共享内存,本文介绍System V 共享内存.System V共享内存头文件及相关函数原型:#include <sys/shm.h> int shmget(key_t key, s

System V 共享内存

一 System V 共享内存的函数 1 shmget 函数 shmget(得到一个共享内存标识符或创建一个共享内存对象) 所需头文件 #include <sys/ipc.h> #include <sys/shm.h> 函数说明 得到一个共享内存标识符或创建一个共享内存对象并返回共享内存标识符 函数原型 int shmget(key_t key, size_t size, int shmflg) 函数传入值 key 0(IPC_PRIVATE):会建立新共享内存对象 大于0的32位

Linux system v 共享内存

system v 共享内存 #include <sys/types.h> #include <sys/shm.h> int shmget(key_t key, size_t size, int shmflg); 建立:进程与共享内存的关联关系 key_t key:16进制的非0数字. 一般有两种方式设置它. 第一种:调用fotk函数 第二章:直接使用IPC_PRIVATE size:共享内存的大小 shmflg: IPC_CREAT IPC_EXCL 用户,组用户,其他用户对这片内

Linux IPC实践(9) --System V共享内存

共享内存API #include <sys/ipc.h> #include <sys/shm.h> int shmget(key_t key, size_t size, int shmflg); void *shmat(int shmid, const void *shmaddr, int shmflg); int shmdt(const void *shmaddr); int shmctl(int shmid, int cmd, struct shmid_ds *buf); //

System V共享内存

shmread.c #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/mman.h> #include <sys/ipc.h> #include <sys/shm.h> #include <stdlib.h> #include <stdio.h> #inc

system v 共享内存区

#include<sys/shm.h> int shmget(key_t key,size_t size,int oflag);    返回:成功则为共享内存区对象,出错为-1 key 的值可以是ftok的返回值,也可以是IPC_PRIVATE. ftok()               是非亲缘进程间 IPC_PRIVATE         是亲缘进程间的 size以字节为单位指定内存区的大小.当实际操作为创建一个新的共享内存区时,必须指定一个不为0的size值.如果实际操作为访问一个已存在

glibc库详解及与POSIX,system V这些库之间关系的说明

自己想了解下关于system v,在网上看到一篇详细的说明,与大家分享一下,原文地址http://hi.baidu.com/tekuba/item/570887775696542e5c178918 以前对glibc,POSIX等的关系一直很迷惑.这是今天在网上找到的说明glibc,POSIX,system V关系的一篇不错的文章,虽然有些地方不通顺(大概是直接用机器翻译过来的),但大概意思能明白了.通过下面的说明,我们就可以明白linux应用层的层次构造.关键是glibc,他是linux最底层的