【发布时间】:2016-07-26 14:00:04
【问题描述】:
我有一个消息队列进程间通信的密钥,比如key_t = 10。
如果消息队列已经存在且键值为 10,我想获取队列 ID。
目前我正在使用下面的代码来查找队列是否存在使用返回错误
msgget((key_t)10,IPC_EXCL|IPC_CREAT|0777)
但我想获取队列 ID 并需要关闭它。
【问题讨论】:
我有一个消息队列进程间通信的密钥,比如key_t = 10。
如果消息队列已经存在且键值为 10,我想获取队列 ID。
目前我正在使用下面的代码来查找队列是否存在使用返回错误
msgget((key_t)10,IPC_EXCL|IPC_CREAT|0777)
但我想获取队列 ID 并需要关闭它。
【问题讨论】:
您可以使用msgget 而不使用IPC_EXCL 标志来获取现有的消息队列标识符。
mid = msgget((key_t)10, 0);
然后,使用该标识符,您可以使用带有IPC_RMID 标志的msgctl 删除消息队列。
编辑:
key_t ftok(char *pathname, char proj_id);
【讨论】:
ftok 生成唯一的System V IPC key。
ftok 的用法。 ftok 不会将任何 key 存储到给定的文件路径中。但是,它将使用这些信息来生成唯一的消息队列密钥。阅读有关ftok 和用法的更多信息。如需key,需自行存储。