2013年12月11日

摘要: 前面在看Xen的源码时,遇到了一段代码,如下所示:注意上面最后一行的代码,这里定义了一个长度为的数组,这种用法可以吗?为什么可以使用长度为0的数组?长度为的数组到底怎么使用?……这篇文章主要针对该问题进行简单的讲解。废话不多说了,现在就开始。长度为的数组在标准c和c++中是不允许的,如果使用长度为的数组,编译时会产生错误,提示数组长度不能为。但在GNUc中,这种用法却是合法的。它的最典型的用法就是位于数组中的最后一项,如上面所示,这样做主要是为了方便内存缓冲区的管理。如果你将上面的长度为的数组换为指针,那么在分配内存时,需采用两步:首先,需为结构体分配一块内存空间;其次再为结构体中的成员变量分 阅读全文

posted @ 2013-12-11 15:29 冰锋所指 阅读(174) 评论(0) 推荐(0) 编辑

2013年11月20日

摘要: int socket(int domain, int type, int protocol); domain参数代表地址族,我们最常用的是TCP/IP协议通信中使用的是AF_INET,在有些情况下建立的socket仅限于同一台设备上进程间的通信,此时可以使用AF_UNIX或者AF_LOCAL,可以是面向连接的(类型 SOCK_STREAM),也可以是无连接的(类型 SOCK_DGRAM)。两种类型都很可靠,原因是没有连接两个进程的外部通信函数。 下面举一个本地socket Server端的例子:1 int sockfd = -1;2 struct sockaddr_un addr;3 ... 阅读全文

posted @ 2013-11-20 10:10 冰锋所指 阅读(4278) 评论(0) 推荐(0) 编辑

2013年8月5日

摘要: 这个转换和随意的认知是不同的,要了解BCD码和二进制码的区别#define BCD_TO_BIN(val) ((val)=((val)&15) + ((val)>>4)*10) 以前主要是对val*10的不理解。 阅读全文

posted @ 2013-08-05 10:10 冰锋所指 阅读(1648) 评论(0) 推荐(0) 编辑

2013年8月2日

摘要: 最近在做一个C的嵌入式项目,发现在C语言中用printf()函数打印字符型变量时,如果想采用"%x"的格式将字符型变量值以十六进制形式打印出来,会出现一个小问题,如下:C代码charbuf[10]={0};buf[0]=0xbf;printf("%2x\n\n\n",buf[0]);/*在终端将会显示成:ffffffbf*/buf[1]=0x7f;printf("%2x\n\n\n",buf[1]);/*在终端将会显示成:7f*/为什么buf[0]不像buf[1]显示的那样,显示2个十六进制数bf呢?研究发现,只要字符型变量值的二进制 阅读全文

posted @ 2013-08-02 10:39 冰锋所指 阅读(1363) 评论(0) 推荐(0) 编辑