关于作者

用户名:flashi
笔名:flashi
地区: 福建-厦门
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



友情链接

访问统计:
文章个数:35
评论个数:18
留言条数:0




Powered by BlogDriver 2.1

十字路口

 

在每个人的人生道路上,都有很多十字路口,也许你会犹豫,但是机会也在你犹豫时,不知不觉地溜走,所以现在我已选定方向,不再犹豫......

联系我:flybird14@163.com

文章

unix自定义结构在优化编译中对齐问题

我最近碰见一个从端口读取数据流模块,并进行相应的流分析的问题。
是在Solaris平台下,用g++3.3.2编译,但是当我编译通过并测试时,
我的分析结果总是有错误。
对流模块的分析方法:我是先把该流模块存储到一个指定地址的自定
义结构体,然后依次输出结构体的各成员。
按理说这样简单的方式应该不会出错。结构体如下:
struct TIME1
{
        WORD year;
        BYTE month;
        BYTE day;
        BYTE hour;
        BYTE minute;
        BYTE second;
        WORD data;
};

我用一段很简单的代码对结构体进行测试
#include <stdio.h>
typedef unsigned char   BYTE;
typedef unsigned short  WORD;
struct TIME1
{
        WORD year;
        BYTE month;
        BYTE day;
        BYTE hour;
        BYTE minute;
        BYTE second;
        WORD data;
};
int main()
{
        struct TIME1 t1;
        printf("%d\n", sizeof(t1));
        return 0;
}

结果输出为10,但是如果按照实际字节来算的话,struct TIME1的size应
该是2+1+1+1+1+1+2=9,为什么会凭空多出一个字节出来,通过google
查找资料发现,这是自定义结构体在优化编译中对齐问题导致的。
这也正是导致流分析出错的原因。
那么如何解决呢,通过查询资料,有以下简单的解决方法:
1.对于大多数的unix系统(不包括AIX)
可使用#pragma pack()压缩所使用的数据结构
#pragma pack(1)
struct TIME1
{
        WORD year;
        BYTE month;
        BYTE day;
        BYTE hour;
        BYTE minute;
        BYTE second;
        WORD data;
};
#pragma pack()
在#pragma pack(1) 与 #pragma pack()之间的结构体,都将被压缩,其
所占空间的长度也就和实际情况一样了。
2.如果是SPARC/Solaris,还可以这样
struct XXX
{
}__attribute__ ((packed));

3.对于ibm的AIX系统,可采用如下方法解决该问题。

#pragma options align=packed
struct XXX
{
};
#pragma options align=reset

这是相对比较简捷的方法,当然还有其他办法,这里就不多介绍了。

- 作者: flashi 2005年12月15日, 星期四 09:54  回复(0) |  引用(0) 加入博采

在awk中使用变量

在shell脚本中,一个字符串变量
str="first second third forth fifth"

在一个循环中,要在第一次循环取到first, 第二次循环取到second,以此类推。。
脚本实现如下:

i=0
while true
do
    i=`expr $i + 1`
    substr=`echo $str|awk '{print $'$i'}'`
    echo $substr
    if [ $i -eq 5 ] ; then
        break
    fi
done

- 作者: flashi 2005年11月30日, 星期三 17:29  回复(0) |  引用(0) 加入博采

好久没有上来了
摘要:工作了,更忙了…… 查看全文

- 作者: flashi 2005年09月6日, 星期二 08:33  回复(0) |  引用(0) 加入博采

80年代出生者的苦水
摘要:美好的生活属于谁呢?二十年前,“属于我,属于你,属于八十年代的新一辈“,十五年前“太阳是我们的,太阳是我们的,月亮……”,十年前“让我们期待明 天会更好!”,八年前“不经历风雨,则么能见彩虹,没有人能随随便便成功”,现在“我闭上眼睛就成天黑”。 查看全文

- 作者: flashi 2005年05月24日, 星期二 18:49  回复(2) |  引用(0) 加入博采

仿佛看见了未来
摘要:出来一个月,在联通公司实习,收获还是不少,初次体会到了一个程序员一天的生活 枯燥?单调? 也许吧。 开始怀念学校的生活,怀念那被我们一直抱怨的学校食堂 今天回厦门,大学时代最后一个五一了,一定要好好计划下这大学最后的时光。 查看全文

- 作者: flashi 2005年05月1日, 星期日 09:00  回复(0) |  引用(0) 加入博采

路,一个人走

- 作者: flashi 2005年04月17日, 星期日 18:15  回复(0) |  引用(0) 加入博采

物是人非
                      外面的天空很静                        
                      有长风吹过;
                      ........

                      我默默走着,却不回头.

- 作者: flashi 2005年04月16日, 星期六 22:04  回复(0) |  引用(0) 加入博采

你是人间的四月天

       我说你是人间的四月天;
       笑音点亮了四面风;轻灵
       在春的光艳中交舞着变。

       你是四月早天里的云烟,
       黄昏吹着风的软,星子在
       无意中闪,细雨点洒在花前。

       那轻,那娉婷,你是,鲜妍
       百花的冠冕你戴着,你是
       天真、庄严,你是夜夜的月圆。

       雪化后那片鹅黄,你像;新鲜
       初放芽的绿,你是;柔嫩喜悦
       水光浮动着你梦期待中白莲。

       你是一树一树的花开,是燕
       在梁间呢喃,——你是爱,是暖,
       是希望,你是人间的四月天!

------------------

不经意间,看到这首林徽因的《你是人间的四月天》,莫名的,有一种淡淡的感动,
一个人,在一个陌生的城市,寂寞,孤独,郁闷,工作的劳累,一股脑儿地涌过来,
我的人间四月天在哪里?


- 作者: flashi 2005年04月16日, 星期六 20:27  回复(2) |  引用(0) 加入博采

买车票(joke)
今天坐车,一对年青的夫妇带着一个三岁左右特别顽皮的小男孩。到了买票的时候,父亲掏钱买了两张票,那个小孩就大吵大嚷,非要给自己也买张票。孩子母亲连忙哄他:"别闹,别闹,等你再长高点就给你买票。" 男孩嚷道:"我已经够高了,我要买票,我要买票。"说着为了显示自己够高就在车里跳起来。孩子父亲骗他说:"好好好,刚才已经给你买票了。" 男孩还是不罢休:"我看见了你们买了两张票,我要买票,我要买票......"。就在小孩不停地闹的时候,孩子母亲的脸色已经逐渐变了,坐在她身后好几米处都能感受到她的小宇宙正在燃烧,就在她即将爆发的一瞬间,孩子父亲突然用镇定的语调对儿子说: "刚才的两张票就是给你和我买的,你妈是美女,按规定乘车免票。"

- 作者: flashi 2005年03月30日, 星期三 18:12  回复(1) |  引用(0) 加入博采

已锁定
此日志的浏览权限已被作者锁定,请同作者联系,发送短消息,如果你的身份符合作者的要求,点击此处可以进行浏览

- 作者: flashi 2005年03月30日, 星期三 11:36  回复(0) |  引用(0) 加入博采