今天学信号队列时搞半天才整出来
感谢某一博主的博文才得以解决:https://blog.csdn.net/cumtzdlxm/article/details/79213360
下面列出主要出错代码:
typedef struct {
long msgtype;
char data[30];
}MSG;
key_t key;
int msgid;
MSG msg;
if(key = ftok(".",'b') < 0){
perror("ftok");
exit(-1);
}
if(msgid = msgget(key, IPC_CREAT | 0666)<0){
perror("msgget");
exit(-1);
}
从其他博文中都说是类型问题,怎么改都不行。
这段代码看似没毛病,但是有个很致命的错误!
在if判断语句内,将其拿出来单纯看 msgid = msgget(key, IPC_CREAT | 0666)<0
你会发现,优先级的问题
先执行msgget(key, IPC_CREAT | 0666)<0,然后在对msgid进行赋值
造成msgid的值为0,原因是后面的判断为假。
注意:这里两个判断句都错在同一个地方,只拿了第二个讲解
实践的重要性,多写代码吧…