最近项目中出现的问题(结构体,指针,文件描述符)

最近需要将服务器端软件由windows移植到Linux,以前讨论过windows下的Socket和Linux下的socket区别,虽然socket问题解决了,但是最近一系列的字符类型问题以及大端小端问题,折磨得我非常痛苦,下面述说这两天遇到的问题。

1,操作野文件描述符

在open("mini2440_spi", O_RDWR)操作时,没有将打开的文件描述符赋值给int spi,在后面操作spi过程中,使用的write和read都没有确定操作是否正确(判断返回值是否小于0),这一错误,还有由于在系统编程过程中,没有养成良好的错误意识。

2,指针问题

在C语言中,最强大的工具是指针,最容易错误的问题还是指针,在实现spi write函数过程中,由于错误的将地址传递写成了赋值传递,导致在调用底层驱动提供的write函数时,copy_from_user()函数无法正确执行,在编程过程中一定要注意传入参数的问题。

3,字节对齐问题

在windows下,server端运行非常好,但是在ARM上的Linux出现了问题,格式化数据过程中出现了问题,其中一个结构体如下:

typedef struct
{
MyAddrT src; /* source addr */
MyAddrT dest; /* destination addr */
MyByte8T mode; /* application mode (STOP,START,PAIR) */
MyByte8T rec_mode; /* recevied mode*/
MyByte8T data_mode; /* continue or ondemand */
TagLocationDataT tag[APP_MAX_TAG];
MyByte8T anchor_count; /* how many anchors exist */
MyByte8T anchor_addr[APP_MAX_ANCHOR]; /* address of each anchor */
} AplMemT;

其中需要对结构体的anchor_count以及anchor_addr进行赋值,操作语句如下:

sscanf(tok, "%i", &apl -> count);

sscanf(tok, "%i", &apl -> anchor[i]);

其中%i作用和%d作用一样,表示的4字节的整形,但是再第二条语句过程中,&apl->anchor[0]时,会将结构体的anchor_count一同算做需要赋值的4字节,导致anchor_count在第二条语句时被修改了。

这也提醒我们,在使用scanf过程中,变量一定要和对应的输入格式一致。



你可能感兴趣的:(编程,windows,linux,socket,struct,application)