最近项目中出现的问题(结构体,指针,文件描述符)
2011-11-24 14:34
218 查看
最近需要将服务器端软件由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过程中,变量一定要和对应的输入格式一致。
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过程中,变量一定要和对应的输入格式一致。
相关文章推荐
- 分享最近项目出现的问题和思想升华
- 关于结构体里面的字符串指针输出出现乱码的问题与结构体数组作为参数传值的问题
- 最近开发一个项目使用了Nhibernate出现了如下问题deleted object would be re-saved by cascade (remove deleted object from
- 分享最近项目出现的问题和思想升华
- 最近整理Unity4.x 项目升级Unity5.0 过程中出现的各种常见问题
- 函数用参数为 结构体指针 在VC下出现的问题
- 深入springMVC------文件上传源码解析(上篇) 最近在项目中,使用springmvc 进行上传文件时,出现了一个问题: org.springframework.web.multipart
- 最近一个项目老是出现一个问题. / Out of memory
- 最近整理Unity4.x 项目升级Unity5.0 过程中出现的各种常见问题,与大家共享。
- 最近整理Unity4.x 项目升级Unity5.0 过程中出现的各种常见问题,与大家共享。
- 项目中使用Shiro出现空指针异常的问题
- Linux环境下段错误的产生原因及调试方法小结 最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多、花费时间最长的问题就是
- 函数用参数为 结构体指针 在VC下出现的问题
- 关于最近项目出现的一些问题的感想
- 最近在配mysql和web分离的服务器时所出现的phpmyadmin无法连接远程数据库问题
- Cocos中在.h文件定义的指针类型变量不实例化会在析构时出现问题
- 最近wifi连接局域网出现问题
- C语言定义了一个结构体怎么分配内存?C\C++中结构体变量与结构体指针内存分配问题?
- 解决Eclipse项目中出现appcompat_v7包的问题
- 最近负责Windows Azure项目,现在收集大家使用WA或者想使用WA时经常用到的问题有哪些