这两天写了一个小demo来对公司的一个产品进行测试,由于对cpp不是很熟悉,所以遇上了不少坑,现在记录一下。
msgsnd、msgrcv
-
这两个函数的参数size传的是除去第一个字段type之后的长度。
-
如果传的结构体除了type之外是紧密排布了,那么收到后,可以直接强转回结构体,但要注意机器的大小端问题。如
struct msgq{ long type; char mtext[MAXMSG]; } //往mtext里传 typedef struct MY_STRUCT{ / }__PACKED__ MY_STRUCT; MY_STRUCT my_struct; memcpy(msgq.mtext, &my_Struct, sizeof(my_struct)); msgsnd(msgid, &msgq, sizeof(my_struct), 0); static char databuf[MAXMSG] msgrcv(msgid, databuf, MAXMSG, 0, 0); MY_STRUCT * rcv_struct = (MY_STRUCT *)(databuf + sizeof(long));
-
如果msgid为零,要看看有没有创建成功对应的文件,有些机器是不会自动建的,要自己手动建。
文件io
- 写文件时遇到写不进去,卡住不动,但又没死机、退出,这时候可能是flush的问题,在循环读写里最为常见。
代码块问题
- 要留意大括号的位置,不要把代码块外的语句放到代码块里。
头文件
- 遇到过cout未声明、std::cout不属于std,检查下有没有#include <iostream>,很多代码是用print类函数的,而不是用cout,这时的代码文件中就没有导入<iostream>。