sema shm常用函数

Semaphore

int sem_init ( sem_t *sem, int pshared, unsigned int value )
sem :指向信号量对象
pshared : 指明信号量的类型 (在进程间共享还是线程间共享)。不为0时此信号量在**进程间共享**,否则只能为当前进程的**所有线程共享**。
value : 指定信号量初始值的大小
sem_init() 成功时返回 0;错误时,返回 -1,并把 errno 设置为合适的值
int sem_wait ( sem_t *sem )
等待信号量,如果信号量的值大于0,将信号量的值减1,立即返回。如果信号量的值为0,则线程阻塞。相当于P操作。成功返回0,失败返回-1
int sem_post ( sem_t *sem )
释放信号量,让信号量的值加1。相当于V操作
int sem_destroy ( sem_t *sem )
sem是要销毁的信号量。只有用sem_init初始化的信号量才能用sem_destroy销毁

Share Memory

int shm_open( const char *name, int oflag, mode_t mode )
shm_open最主要的操作也是默认的操作就是在/dev/shm/下面,建立/打开一个文件用于进程间大量数据交换

shmget用于Linux进程通信共享内存。共享内存函数由shmget、shmat、shmdt、shmctl四个函数组成

int ftruncate( int fd, off_t length )
ftruncate()会将参数fd指定的文件大小改为参数length指定的大小。参数fd为已打开的文件描述词,而且必须是以写入模式打开的文件。如果原来的文件件大小比参数length大,则超过的部分会被删去
void* mmap ( void * addr , size_t len , int prot , int flags , int fd , off_t offset )
addr 指定文件应被映射到进程空间的起始地址,一般被指定一个空指针,此时选择起始地址的任务留给内核来完成。函数的返回值为最后文件映射到进程空间的地址,进程可直接操作起始地址为该值的有效地址。
len 是映射到调用进程地址空间的字节数,它从被映射文件开头offset个字节开始算起。
prot 参数指定共享内存的访问权限。可取如下几个值的或:PROT_READ(可读) , PROT_WRITE (可写), PROT_EXEC(可执行),PROT_NONE(不可访问)。
flags 由以下几个常值指定:MAP_SHARED , MAP_PRIVATE , MAP_FIXED,其中,MAP_SHARED , MAP_PRIVATE必选其一,而MAP_FIXED则不推荐使用。
fd 为即将映射到进程空间的文件描述字,一般由open()返回,同时,fd可以指定为-1,此时须指定flags参数中的MAP_ANON,表明进行的是匿名映射(不涉及具体的文件名,避免了文件的创建及打开,很显然只能用于具有亲缘关系的进程间通信)。
offset 参数一般设为0,表示从文件头开始映射
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值