semget创建文件_linux 系统文件操作sem_open, sem_close, sem_post, sem_wait

信号灯分为有名信号灯和内存信号灯

一、Posix有名信号灯1.posix有名信号灯函数   函数sem_open创建一个新的有名信号灯或打开一个已存在的有名信号灯。有名信号灯总是既可用于线程间的同步,又能用于进程间的同步。1. sem_open

名称::sem_open功能:创建并初始化有名信号灯头文件:#include 函数原形:sem_t *sem_open(const char *name,int oflag,/*mode_t mode,unsigned int value*/);参数:name   信号灯的外部名字oflag   选择创建或打开一个现有的信号灯mode 权限位value 信号灯初始值返回值:成功时返回指向信号灯的指针,出错时为SEM_FAILED      oflag参数能是0、O_CREAT(创建一个信号灯)或O_CREAT|O_EXCL(如果没有指定的信号灯就创建),如果指定了O_CREAT,那 么第三个和第四个参数是需要的;其中mode参数指定权限位,value参数指定信号灯的初始值,通常用来指定共享资源的书面。该初始不能超过 SEM_VALUE_MAX,这个常值必须低于为32767。二值信号灯的初始值通常为1,计数信号灯的初始值则往往大于1。   如果指定了O_CREAT(而没有指定O_EXCL),那么只有所需的信号灯尚未存在时才初始化他。所需信号灯已存在条件下指定O_CREAT不是个错 误。该标志的意思仅仅是“如果所需信号灯尚未存在,那就创建并初始化他”。不过所需信号灯等已存在条件下指定O_CREAT|O_EXCL却是个错误。   sem_open返回指向sem_t信号灯的指针,该结构里记录着当前共享资源的数目。

/*semopen.c*/#include #include #include /* For O_* constants */

#include /* For mode constants */

#include intmain(intargc,char**argv){sem_t*sem;if(argc!=2){printf(“please input a file name!\n”);exit(1);}sem=sem_open(argv[1],O_CREAT,0644,1);exit(0);}

2. sem_close

名称::sem_close功能:关闭有名信号灯头文件:#include 函数原形:int sem_close(sem_t *sem);参数:sem 指向信号灯的指针返回值:若成功则返回0,否则返回-1。   一个进程终止时,内核还对其上仍然打开着的所有有名信号灯自动执行这样的信号灯关闭操作。不论该进程是自愿终止的还是非自愿终止的,这种自动关闭都会发生。   但应注意的是关闭一个信号灯并没有将他从系统中删除。这就是说,Posix有名信号灯至少是随内核持续的:即使当前没有进程打开着某个信号灯,他的值仍然保持。

3. sem_unlink

名称::sem_unlink功能:从系统中删除信号灯头文件:#include 函数原形:int sem_unlink(count char *name);参数:name   信号灯的外部名字返回值:若成功则返回0,否则返回-1。有名信号灯使用sem_unlink从系统中删除。每个信号灯有一个引用计数器记录当前的打开次数,sem_unlink必须等待这个数为0时才能把name所指的信号灯从文件系统中删除。也就是要等待最后一个sem_close发生。

/*semunlink.c*/#include#include#include#include#includeintmain(intargc,char**argv){sem_t*sem;intval;if(argc!=2){printf(“please input a file name!\n”);exit(1);}if((sem_unlink(argv[1]))!=0)perror(“sem

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值