精华内容
下载资源
问答
  • man 2 semget 翻译

    2021-02-18 21:35:33
    semget - 获得一个System V信号量集合识别符 概要: #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h> int semget(key_t key, int nsems, int semflg); 描述: semget()...

    名字:

    semget - 获得一个System V信号量集合识别符

    概要:

    #include <sys/types.h>

    #include <sys/ipc.h>

    #include <sys/sem.h>

    int semget(key_t key, int nsems, int semflg);

    描述:

    semget()系统调用返回和参数key关联的System V信号量集合标识符。如果key的值是IPC_PRIVATE或者还没有信号量集合和key关联,并且IPC_CREAT标志有在semflg里面,那么一个新的由nsems个信号量组成的集合就被创建了。

    如果semflg有IPC_CREAT和IPC_EXCL,并且key已经有了一个关联的信号量集合,那么semget()失败并且将errno设置为EEXIT。(这个和组合O_CREAT | O_EXCL对于open(2)有点类似)。

    对于创建,参数semflg的低9位定义了信号量集合的权限(对于所有者、组、其它)。这些位和open(2)的mode参数类似,有相同的形式、相同的意义。(尽管对于信号量来说执行权限没有意义,写权限意味着改变信号量值的权限)。

    当创建一个新的信号量集合的时候,semget()初始化了集合相关联的数据结构,semid_ds (见 semctl(2)),如下:

    sem_perm.cuid 和 sem_perm.uid被设置成调用进程的有效用户ID。

    sem_perm.cgid 和 sem_perm.gid被设置成调用进程的有效组ID。

    sem_perm.mode的低9位被设置成semflg的低9位。

    sem_nsems被设置成nsems。

    sem_otime设置成0。

    sem_ctime设置成当前时间。

    当信号量集合不是在创建的过程中的时候,nsems可以是0。当在信号量集合正在被创建过程中,nsems必须大于0并且小于等于一个信号量集合允许的最多的信号量数目(SEMMSL)。

    如果信号量集合已经存在了,那么权限会被验证。

    返回值:

    如果成功,返回值是信号量集合标识符(一个非负整数),否则返回-1,errno会表明错误的类型。

    错误:

    当发生错误的时候,errno会被设置成以下的值:

    EACCES: 对于key存在一个信号量集合,但是调用进程没有权限访问这个集合,并且在用户空间没有用于管理IPC namespace的CAP_IPC_OWNER功能。

    EEXIST: IPC_CREAT和IPC_EXCL标志有在semflg里面,但是key已经有了关联的信号量集合。

    EINVAL: nsems小于0或者大于信号量集合允许的最大信号量数量(SEMMSL)。

    EINVAL: key关联的信号量集合已经存在,但是nsems大于集合中的信号量个数。

    ENOENT: key没有对应的信号量集合存在,并且semflg没有IPC_CREAT标志。

    ENOMEM: 系统没有足够的空间创建信号量集合。

    ENOSPC: 已经达到系统约束的信号量集合数量(SEMMNI),或者达到系统允许的信号量数量(SEMMNS),无法创建新的信号量集合。

    遵守:

    SVr4, POSIX.1-2001

    注意:

    包含<sys/types.h>和<sys/ipc.h>在Linux或者其它POSIX版本下面都不是必须的。但是有些老的实现需要包含这些头文件,SVID也记录了他们的包含。要兼容这些旧系统的应用可能需要包含这些头文件。

    IPC_PRIVATE不是一个标志位而是一个key_t类型的数据。如果这个值用做key,系统调用忽略semflg除了低9位以外的位,然后创建一个新的信号量集合(成功的话)。

    信号量初始化

    新创建的信号量集合中的信号量的值是不确定的。(POSIX.1-2001和POSIX.1-2008明确了这一点,虽然POSIX.1-2008提到未来的标准可能你需要要求信号量初始化为0)虽然Linux和其它实现一样,将信号量的值初始化为0,一个可移植的应用不应该依靠这一点:它应该明确的初始化信号量为想要的值。

    初始化可以通过semctl(2)的SETVAL或者SETALL操作。当多个对象不知道哪个会初始化集合的时候,检查sem_otime这个值可以避免竞争的出现。semctl(2)的IPC_STAT操作可以检索包含sem_otime的数据结构。

    信号量约束

    以下的信号量集合相关的资源会影响semget()调用:

    SEMMNI: 系统级别对于信号量几何数量的限制。在Linux3.19之前的版本,这个默认值是128。从Linux3.19开始,这个值是32000。在Linux上面这个值可以通过/proc/sys/kernel/sem的第四个字段进行读取和修改。

    SEMMSL:每个信号量ID允许的最大数量信号量个数。3.19之前的Linux,这个约束的默认值是250.自从Linux3.19之后开始,这个值是32000.在Linux上这个值可以通过/proc/sys/kernel/sem的第一个字段修改或者读取。

    SEMMNS: 系统级别的信号量数量约束。实现相关:(在Linux,这个约束可以通过/proc/sys/kernel/sem的第二个字段修改和读取。)注意,系统级别的信号量数目还受到SEMMSL和SEMMNI的乘积的约束。

    Bugs

    IPC_PRIVATE这个名字起的不好,IPC_NEW更准确一些。

    相关

    semctl(2), semop(2), ftok(3), capabilities(7), sem_overview(7), svipc(7)

    版本记录

    4.15

     

     

    展开全文
  • about semget

    2014-03-21 14:10:00
    flags must include read,write,execute permission. ...semget( 3333, 1, IPC_CREAT | IPC_EXCL | 0666 ); if there is not a '0666', then 'semop' wait will succed always. 转载于:https://www.cnbl...

    flags must include read,write,execute permission.

    for examples:

    semget( 3333, 1, IPC_CREAT | IPC_EXCL | 0666 );

    if there is not a '0666', then 'semop' wait will succed always. 

    转载于:https://www.cnblogs.com/feika/p/3615756.html

    展开全文
  • semget 信号量创建

    2016-01-03 23:03:00
    Linux进程间通信(六)---信号量通信之semget()、semctl()、semop()及其用法:...信号量 Linux函数 semget();semctl();semop();:http://blog.csdn.net/ta893115871/article/details/7505560 信号量函数 sem...

    Linux进程间通信(六)---信号量通信之semget()、semctl()、semop()及其用法:http://www.educity.cn/linux/1241661.html

    信号量 Linux函数 semget();semctl();semop();:http://blog.csdn.net/ta893115871/article/details/7505560

    信号量函数 semget() semop() semctl():http://blog.chinaunix.net/uid-23193900-id-3221978.html

    转载于:https://www.cnblogs.com/saijin/p/5097441.html

    展开全文
  • 2014年4月2 日 信号量函数 (semget、semop、semctl )及其范例 - g uoping 16的专栏 - 博客频道 - CSDN.NET登录 | 注册guoping16的专栏目录视图 摘要视图 订阅个人资料20 14开源技术大会 (读书汇) OpenStack企业应用...

    2014年4月2 日 信号量函数 (semget、semop、semctl )及其范例 - g uoping 16的专栏 - 博客频道 - CSDN.NET

    登录 | 注册

    guoping16的专栏

    目录视图 摘要视图 订阅

    个人资料

    20 14开源技术大会 (读书汇) OpenStack企业应用之路浅析

    信号量函数 (semget、semop、semctl )及其范例

    分类: Linux进程间通信 20 11-07-04 17:34 4 180人阅读 评论(2) 收藏 举报

    struct system cmd date buffer 数据结构

    目录(?) [+]

    guoping16

    访问: 52 12 1次

    积分: 946分 信号量函数由semget、semop、semctl三个函数组成。下面的表格列出了这三个函数的

    排名: 第15089名 函数原型及具体说明。

    原创: 48篇 转载: 2篇 1. semget函数原型

    译文: 0篇 评论: 12条

    semget(得到一个信号量集标识符或创建一个信号量集对象)

    文章搜索

    所需#include

    头文

    #include

    文章分类 #include

    Linux进程编程 (13)

    Linux进程间通信 (8) 函数得到一个信号量集标识符或创建一个信号量集对象并返回信号量集标识符

    Linux网络编程 (6) 说明

    C语言 (14)

    libxml编程 (7)

    深入浅出Linux工具与编程 (2) 函数 int semget(key_t key, int nsems, int semflg)

    原型

    文章存档

    函数 key 0(IPC_PRIVAT E):会建立新信号量集对象

    20 11年08月 (2) 传入

    20 11年07月 (48) 值 大于0的32位整数:视参数semflg来确定操作,通常要求此值来源于ftok返

    展开全文
  • semget函数 创建信号量集 int semget( key_t key, int nsems, int flag); //such as: semId = semget(key,1,IPC_CREAT|0666); if(semId == -1){ perror("semget"); return -1; } 参数 nsems 是...
  • 请先直接下载代码的,走这里...r1, _, _ := syscall.Syscall(syscall.SYS_SEMGET, uintptr(key),uintptr(1), uintptr(00666)) go没有直接调用系统调用的能力,要用syscall方式转换一次。第一个参数是系统调用编号...
  • semget()

    千次阅读 2009-02-19 21:21:00
    可以使用系统调用semget()创建一个新的信号量集,或者存取一个已经存在的信号量集: 系统调用:semget();原型:int semget(key_t key,int nsems,int semflg);返回值:如果成功,则返回信号量集的IPC标识符。如果失败...
  • 遇到PostgreSQL initdb 过程中semget报错,怎么办? 【重现步骤】 报错的过程如下: [sdbadmin@localhost bin]$ ./initdb -D /home/sdbadmin/pgdata/ The files belonging to this database system will be ...
  • 信号量函数由semget、semop、semctl三个函数组成。下面的表格列出了这三个函数的函数原型及具体说明。 1. semget函数原型 semget(得到一个信号量集标识符或创建一个信号量集对象) 所需头文件 ...
  • semget——创建信号量 semctl——控制信号量 semop——对信号量进行PV 操作 一、semget——创建信号量 表头文件 #include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.
  • 创建信号量semget

    千次阅读 2011-12-28 09:48:32
    可以使用系统调用semget()创建一个新的信号量集,或者存取一个已经存在的信号量集: 系统调用:semget(); 原型:intsemget(key_t key,int nsems,int semflg); 返回值:如果成功,则返回信号量集的IPC标识符。如果...
  • 头文件 ... int semget(key_t key ,int nsems ,int semflg ); 关键标识符key:所创建或打开信号量集的键值, key 值可用[fork()](https://blog.csdn.net/weixin_43117602/article/details/10
  • 1. semget函数  1>函数功能:得到一个信号量集标识符或创建一个信号量集对象;  2>函数原型:int semget(key_t key, int nsems, int semflg);  3>函数返回值:成功时:返回值为信号量集的标识符 失败时:...
  • 信号量函数:semget() semop()semctl()1.semget()创建一个新的信号量集,或者存取一个已经存在的信号量集;原型:int semget(key_t key,int nsems,int semflg);返回值:如果成功,则返回信号量集的IPC标识符。...
  • 信号量 Linux下的信号量函数都是在通用的信号量数组上进行操作,而不是在一个单一的二值信号量上...semget函数 创建或获取一个信号量组:成功返回信号量集ID,失败返回-1 #include <sys/types.h> #include <sys/
  • 二.System V信号量和Posix信号量区别 信号量有两种实现:传统...例如,应该是semget()而不是sem_get()。然而,所有的的POSIX信号量函数都有一个下划线。下面列出了它们提供的所有函数清单: Systm V POSIX se...
  • ① 创建信号量或获得在系统中已存在的信号量,此时需要调用 semget() 函数。不同进程通过使用同一个信号量键值来获得同一个信号量。 ② 初始化信号量,此时使用 semctl() 函数的SETVAL操作。当使用二维信号量时,...
  • linux c的信号量操作 // semphore int main() { int sem_mutex = 0; /** * 创建信号量, * IPC_CREAT 如果存在就获取,否则就创建新的, * 权限是0666, ... sem_mutex = semget(123, 1, IPC...
  • semget()  可以使用系统调用semget()创建一个新的信号量集,或者存取一个已经存在的信号量集: 系统调用:semget(); 原型:intsemget(key_t key,int nsems,int semflg); 返回值:如果成功,则返回信号量集...
  • int semget(key_t key, int nsems, int semflg); //创建/打开信号量集 //参数一:起个名 //参数二:信号量集合中信号量的个数,打开的话写0; //参数三:打开写0,创建写O_CREAT | 权限 //返回创建好的信号量集的...
  •   所需头文件 #include #include #include int semget(key_t key,int nsems, int semflg) 执行成功则得到一个信号量集标识符或创建一个信号量集对象,出错返回-1,原因存在error中。 key:0
  • int semget(key_t key, int nsems,int semflag);//可以获得多个信号量 nsems信号量个数,一旦创建就不能更改信号量个数。 semflg权限,IPC_CREAT:如果没有这个信号则创建。 返回值:正数就是semid,报错-1。 int a....
  •    semget函数原型:int semget(key_t key, int nsems, int semflg);    参数key和返回值id都是用来识别共享内存的标识的,为什么需要它们两个来标识而不是一个key就够了?    id是IPC对象的内部名,即在进程...
  • SEMGET FUNCTION The prototype of semget is int semget(key_tkey, intnsems,intsemflg); We use semget() toget a semaphore set ID. After we call semget() successfully, it returns a non-negative int....
  • &lt;!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } ...SEMGET FUNCTION The prototype of semget is int semget(key_t key , int nsems , ...
  • semget这样是创建了0个信号量吗?求详细解释,谢谢。怎么看不懂啊,求大神给小白 讲解下,谢谢
  • semget函数报错,errno设置为28

    千次阅读 2013-09-03 14:22:34
    在函数运行时出错,查找日志发现semget函数报错,errno设置为28。遇到系统调用发生错误的情况,可以尝试以下几种思路: 1. 使用strerror函数或者perror函数输出错误说明。 2. 如果第一步还不是很清楚,可以根据errno...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,817
精华内容 3,126
关键字:

semget