1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]Unix

练习 读取wtmpx文件 000-031 登录名 112-113 登录IP字符串长度 114-371 登录IP 查看IPC的命令 显示 ipcs -a 显示所有共享内核对象 ipcs -m 显示共享内存 m=memory ipcs -q 显示共享队列 q=queue ipcs -s 显示信号量 s=semphore 删除 ipcrm -m ID 删除共享内存 ipcrm -q ID 删除共享队列 ipcrm -s ID 删除信号量 消息队列 消息的链接表,存放在内核中并由消息队列标准符标识 用msgget有来创建或打开一个队列,msgsend将新消息加入到队列尾端,用msgrcv从队列中取消息。 每个消息包含一个正长整形字段,一个非负长度及实际数据字节 每个队列都有一个msqid_ds结构与之关联 消息队列 打开一个现有队列或创建一个新队列 int msgget(key_t key, int flag); 当创建新队列时,会初始化msqid_ds结构中的相关成员 如果执行成功,返回非负队列ID 将数据放入消息队列 int msgsnd(int msgid, const void* ptr, size_t sz, int flag); ptr指向一个长整数,它包含正的消息类型,其后紧跟着消息数据。比如,发送的消息是512个字节,可定义下列结构 struct mymesg{ long mtype; char mtext[512]; }; sz并不包含long类型所占的空间 flag可以是IPC_NOWAIT,指示消息发送是否阻塞 消息队列 从队列中取用消息 ssize_t msgrvc(int msqid, void* ptr, size_t sz, long type, int flag); prt和sz参数和发送相同 如果sz比返回的消息小,而且flag指定了MSG_NOERROR,则消息被截断,如果没有设置该标志,消息又太长,则出错返回E2BIG(消息仍留在队列中) 参数type让我们可以指定哪种消息 ==0 返回队列中的第一个消息 0 返回队列中类型为type的第一个消息 0 返回队列中消息类型小于或等于type绝对值的消息,如果有多个,则取类型值最小的消息。 可以指定flag值为IPC_NOWAIT,使用其操作不阻塞。这使得如果没有指定类型的消息,则msgrcv返回-1.errno设置ENOMSG msgctl函数 和共享存储段一样,消息队列的函数msgctl和shmctl操作几乎一样。 int msgctl(int msqid, int cmd, struct msqid_ds* buf) 信号量 信号量与前几种IPC不同,它是一个计数器,用于多进程对共享数据对象的访问。 进程为获去共享资源,需要执行以下操作 测试控制该资源的信号量 若此信号量的值为正,则进程可以使用资源。进程将信号量减1,表示它使用了资源 若此信号量值为0,则进程进入休眠状态,直到信号量大于0,进程被唤醒,返回第1步执行 当进程不再使用由一个信号量控制的共享资源时,该信号量值增1。如果有进程正在休眠等待此信号量,则唤醒它 信号量 获得一个信号量集ID int semget(key_t key, int nsems, int flag) nsems是该集合中的信号量数,如果创建,必需指定 操作信号量 int semctl(int semid, int semnum, int cmd, /*union senum arg*/) 第四个参数是可选的,它是多个特定命令的参数联合 union semun{ int val; /*for SETVAL*/ struct semid_ds *buf; /*for IPC_STAT IPC_SET*/ unsigned short *array; /*for GETALL SETALL*/ } 注意:此联合可能需要自己定义 信号量 执行信号量集合上的操作数组 int semop(int semid, struct sembuf semoparray[],size_t nops); 参数semoparray是一个指针,它指向一个信号量操作数组,信号量操作由sembuf结构表示: struct sembuf{ unsigned short sem_num;//操作信号量的下标 short sem_op; //对信号量操作方式。 负数,0,正数 short sem_flg; //信号量的操作标记,默认为0 }; 如果sem_op为正,则对应于进程释放占用的资源数,sem_op值加到信号量上,如果指定了undo标志(sem_flg成员设置了SEM_UND

文档评论(0)

qiwqpu54 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档