|
UNPv2中3.6节提到ipc_perm->seq是slot usage sequence number
我用下面的程序测试,solaris下
#include <sys/msg.h>
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char **argv)
{
int i, msqid;
for (i = 0; i < 10; i++) {
msqid = msgget(IPC_PRIVATE, IPC_CREAT);
struct msqid_ds info;
msgctl(msqid, IPC_STAT, &info);
printf("msqid = %d seq = %lu\n", msqid, info.msg_perm.seq);
msgctl(msqid, IPC_RMID, NULL);
}
exit(0);
}
如果用cc编译输出是
msqid = 1254850 seq = 4290771496
msqid = 1259970 seq = 4290771496
msqid = 1265090 seq = 4290771496
msqid = 1270210 seq = 4290771496
msqid = 1275330 seq = 4290771496
msqid = 1280450 seq = 4290771496
msqid = 1285570 seq = 4290771496
msqid = 1290690 seq = 4290771496
msqid = 1295810 seq = 4290771496
msqid = 1300930 seq = 4290771496
如果用C++编译器CC编译输出是
msqid = 1306050 seq = 0
msqid = 1311170 seq = 0
msqid = 1316290 seq = 0
msqid = 1321410 seq = 0
msqid = 1326530 seq = 0
msqid = 1331650 seq = 0
msqid = 1336770 seq = 0
msqid = 1341890 seq = 0
msqid = 1347010 seq = 0
msqid = 1352130 seq = 0
4290771496正好是2的32次幂。
这个seq字段到底是用来做什么的呢
另外从那个msgid来看,重用ID应该是上次ID加上系统设置的最大消息队列数。上面的是5120。系统的也是5120
|