c/C++
文章平均质量分 68
maopig
这个作者很懒,什么都没留下…
展开
-
Visual studio内存泄露检查工具--BoundsChecker
BoundsChecker是一个Run-Time错误检测工具,它主要定位程序在运行时期发生的各种错误。 BoundsChecker能检测的错误包括: 1)指针操作和内存、资源泄露错误,比如:内存泄露;资源泄露;对指针变量的错误操作。 2)内存操作方面的错误,比如:内存读、写溢出;使用未初始化的内存。 3)API函原创 2011-11-29 23:01:36 · 2523 阅读 · 0 评论 -
ARP协议
ARP协议(Address ResolutionProtocol),或称地址解析协议。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。他是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被icmp v6所替代。目录1基本功能 2原理 3另见 4外部链接原创 2012-02-28 18:16:36 · 1038 阅读 · 0 评论 -
数据链路层
数据链路的定义链路:计算机网络中相邻节点的一段物理线路。数据链路:计算机网络中节点到节点相邻的一段物理路线加上控制在这些路线上传输数据的协议。数据链路层解决的问题对于计算机网络里面的每一层,其实都是为了解决某一个层面的问题而设计出来的,数据链路层也一样:由于物理层只解决了信号流在物理媒介的传输问题,而数据链路层就在它之上,解决如何在链路这一个层面上实现数据的传输。数据链路的种类原创 2012-02-29 19:23:56 · 2022 阅读 · 0 评论 -
关于用户空间和内核空间
当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(内核态)。在内核态下,CPU可执行任何指令。当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。用户态不能访问内核空间,包括代码和数据。进程处于用户态时能访问的是用户空间,处于内核态时能访问的称为内核空间。CPU执行程序所访问的地址都是虚拟地址,MMU 必须通过读取控制寄存器CR3中的值作为当前页面转载 2012-03-06 23:40:59 · 1181 阅读 · 0 评论 -
linux socket UDP编程发送广播
#include#include#include#include#include#include#include#include#include#include#include#include #include#define PORT 7773#define MAXDATASIZE 256int main(int argc,char *a转载 2012-03-08 10:55:50 · 17928 阅读 · 0 评论 -
mkcramfs 命令学习
mkcramfs :创建只读文件系统语 法mkcramfs[必要参数][选择参数][源目录][目标文件]功 能mkcramfs 命令:用来创建CRAMFS只读文件系统 类似命令: fdisk cramfsck mount 执行权限: 超级用户 普通用户 命令属性: 磁盘维护 参数必要参数-e 设置文件系统版本号-i 将文件映像插入文原创 2012-03-10 16:56:13 · 4156 阅读 · 0 评论 -
内核中_init,_exit中的作用
__init, __initdata等属性标志,是要把这种属性的代码放入目标文件的.init.text节,数据放入.init.data节──这一过程是通过编译内核时为相关目标平台提供了xxx.lds链接脚本来指导ld完成的。 对编译成module的代码和数据来说,当模块加载时,__init属性的函数就被执行; 对静态编入内核的代码和数据来说,当内核引导时,do_basic_set原创 2012-03-30 09:29:54 · 12049 阅读 · 0 评论 -
usleep函数
usleep功能把进程挂起一段时间, 单位是微秒(百万分之一秒); 头文件: unistd.h 语法: void usleep(int micro_seconds); 返回值: 无 内容说明:本函数可暂时使程序停止执行。参数 micro_seconds 为要暂停的微秒数(us)。 注意:这个函数不能工作在 Windows 操作系统中。参见:us原创 2012-03-15 16:12:49 · 9115 阅读 · 0 评论 -
Linux下c开发 之 线程通信与pthread_cond_wait()的使用
pthread_cond_wait()/************pthread_cond_wait()的使用方法**********/ pthread_mutex_lock(&qlock); pthread_cond_wait(&qready, &qlock); pthread_mutex_unlock(&qlock);/***********转载 2012-02-19 17:03:39 · 11288 阅读 · 0 评论 -
带头尾指针的list的C实现
一、缘起很早写了一个带头尾指针的list,该list支持从尾部插入元素,在任意位置删除元素,最近用这个list时发现一个bug,修正了,并加了几个接口函数。贴出来,希望对C的初学者有用。二、基本说明2.1、数据结构l listnode typedef struct listnode{ int data; //转载 2012-02-22 23:30:18 · 3367 阅读 · 0 评论 -
MFC入门(一)——MFC是一个编程框架
MFC (Microsoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。Microsoft Vi转载 2012-02-13 22:02:33 · 1877 阅读 · 0 评论 -
fread函数和fwrite函数,read,write
fread函数和fwrite函数 1.函数功能 用来读写一个数据块。2.一般调用形式 fread(buffer,size,count,fp); fwrite(buffer,size,count,fp);3.说明 (1)buffer:是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。 (2)size:要读写的字节数原创 2011-11-07 19:00:04 · 9655 阅读 · 0 评论 -
char a[]和char *a的比较,数组名,数组首地址,a,&a,&a[0]
char a[]和char *a的比较指针和数组存在着一些本质的区别。当然,在某种情况下,比如数组作为函数的参数进行传递时,由于该数组自动退化为同类型的指针,所以在函数内部,作为函数参数传递进来的指针与数组确实具有一定的一致性,但这只是一种比较特殊的情况而已,在本质上,两者是有区别的。请看以下的例子: char a[] = "1234567";char *p = "1234567"原创 2011-11-14 23:15:00 · 7250 阅读 · 0 评论 -
setjmp与logjmp用法总结
setjmp/logjmp的最大用途是错误恢复,只要还没有从主函数退出,一旦发现一个不可恢复的错误,可以把主控制转移大主函数循环,并从那从新开始。使用时必须包含头文件setjmp与longjmp结合使用时,它们必须有严格的先后执行顺序,也即先调用setjmp函数,之后再调用longjmp函数,以恢复到先前被保存的“程序执行点”。(从哪儿来,回哪儿去)否则,如果在setjmp调用之前,执行l原创 2011-12-21 23:43:09 · 1398 阅读 · 0 评论 -
C语言的指针初始化特别注意一点
void func2(int *value){ *value = 2; /// value为空指针,不能被取值,所以*value是错误的}void func1(){ int *p = 0;//此处相当于P=NULL func2(p);} ///////////////////////////////////////////原创 2012-01-15 16:59:52 · 860 阅读 · 1 评论 -
写文件常用方法
static FILE* fp = NULL;unsigned char* mybuf = buf;//buf[0] = 0x00; //buf[1] = 0x00; //buf[2] = 0x00; //buf[3] = 0x01; //buf += 4;(1)、 if ((fp=fopen("/gg/lib/a.txt","w+b"原创 2011-07-20 19:52:04 · 792 阅读 · 0 评论 -
c语言基础知识_结构体访问,共同体,枚举类型
C语言结构体变量的引用: 对于定义的结构体类型的普通变量,访问其成员用圆点运算符(“.”),标准访问方式如下: 结构体变量名.成员名 对于定义为指向结构体的指针变量,用箭头运算符(“->”)访问,标准的访问形式如下: 指向结构体的指针变量名->成员名 当出现结构体嵌套时,访问结构体成员: 指向结构体的指针变量名 -> 次结构体名 .成员名 例如:原创 2011-09-07 13:59:12 · 2638 阅读 · 0 评论 -
char data[0]用法总结
struct MyData { int nLen; char data[0];}; 开始没有理解红色部分的内容,上网搜索下,发现用处很大,记录下来。 在结构中,data是一个数组名;但该数组没有元素;该数组的真实地址紧随结构体MyData之后,而这个地址就是结构体后面数据的地址(如果给这个结构体分配的内容大于这个原创 2012-02-08 21:29:40 · 25045 阅读 · 0 评论 -
internet网络 checksum校验和计算方法
http://hi.baidu.com/%CE%C4%B3%AD%B9%AB/blog/item/7d9a4e08f82d72b32eddd4cb.html转载 2012-03-16 12:54:40 · 3116 阅读 · 1 评论 -
U-boot给kernel传参数和kernel读取参数—struct tag
U-boot 会给 Linux Kernel 传递很多参数,如:串口, RAM , videofb 等。而 Linux kernel 也会读取和处理这些参数。两者之间通过 struct tag 来传递参数。U-boot 把要传递给 kernel 的东西保存在 struct tag 数据结构中,启动 kernel 时,把这个结构体的物理地址传给 kernel ; Linux kernel 通过这转载 2012-03-17 14:34:05 · 1007 阅读 · 0 评论 -
用BusyBox制作Linux根文件系统
STEP 1:构建目录结构 创建根文件系统目录,主要包括以下目录/dev /etc /lib /usr /var /proc /tmp /home /root /mnt /bin /sbin /sys #mkdir /home/rootfs#cd /home/rootfs #mkdir dev etc lib usr var原创 2012-03-17 16:28:33 · 1815 阅读 · 0 评论 -
ioctl之FIONREAD
在学习ioctl 时常常跟 read, write 混淆。其实 ioctl 是用来设置硬件控制寄存器,或者读取硬件状态寄存器的数值之类的。而read,write 是把数据丢入缓冲区,硬件的驱动从缓冲区读取数据一个个发送或者把接收的数据送入缓冲区。 ioctl(keyFd, FIONREAD, &b)得到缓冲区里有多少字节要被读取,然后将字节数放入b里面。接下来就可以转载 2014-07-01 14:46:22 · 4008 阅读 · 0 评论 -
C语言变长数组data[0]【总结】
C语言变长数组data[0]【总结】1、前言 今天在看代码中遇到一个结构中包含char data[0],第一次见到时感觉很奇怪,数组的长度怎么可以为零呢?于是上网搜索一下这样的用法的目的,发现在linux内核中,结构体中经常用到data[0]。这样设计的目的是让数组长度是可变的,根据需要进行分配。方便操作,节省空间。2、data[0]结构经常遇到的结构形状转载 2014-06-19 10:00:56 · 1225 阅读 · 0 评论 -
sscanf中%s用法
#include #include #include void main(){ char Buffer[512] = {" "};char IP[512]={""};char netmask[512];strcpy(Buffer,"/sbin/ifconfig eth0 172.16.129.150 netmask 255.255.255.0 up");原创 2015-01-08 15:35:06 · 8444 阅读 · 0 评论 -
C++静态库与动态库
http://www.cnblogs.com/skynet/p/3372855.html转载 2015-12-12 13:24:57 · 4094 阅读 · 0 评论 -
有名信号量sem_open和内存信号量sem_init创建信号量的区别
有名信号量sem_open和内存信号量sem_init创建信号量的区别 分类: C/C++sem_t *semsem_open(const char *name, int oflag, .../*mode_t mode,unsinged int value) ;int sem_init(sem_t *sem,int shared, unsigned int value)转载 2016-08-17 09:18:22 · 20598 阅读 · 0 评论 -
pthread_create()创建线程最大个数
线程应用程序最常见导致创建线程失败的原因是线程栈大小的设置。创建一个新的线程,默认情况下系统为线程栈预留了2MB的寻址空间。线程栈起始于进程虚拟 内存的高端地址,并向虚拟内存底端地址方向扩展。取决于线程本身的大小以及其它线程内存分配的情况,进程虚拟地址空间消耗过快可能导致创建线程失败。这里有一个测试程序可以看到,Linux下最多可以创建多少个线程。#include #inc转载 2016-08-20 16:00:46 · 7733 阅读 · 1 评论 -
Linux链接库三(C跟C++之间动态库的相互调用)
http://www.cppblog.com/wolf/articles/74928.htmlhttp://www.cppblog.com/wolf/articles/77828.htmlhttp://www.jb51.net/article/34990.htmC和C++之间库的互相调用extern "C"的理解:很多人认为"C"表示的C语言,实际并非如此,"C"表示的是一种链转载 2017-02-15 22:11:57 · 954 阅读 · 0 评论 -
Linux C语言调用C++动态链接库
Linux C语言调用C++动态链接库标签: C调用C++库 2014-03-10 22:56 3744人阅读 评论(0)收藏举报分类: 【Linux应用开发】(48) 版权声明:本文为博主原创文章,未经博主允许不得转载。如果你有一个c++做的动态链接库.so文件,而你只有一些相关类的声明,那么你如何用c调用呢,转载 2017-02-15 22:13:22 · 1495 阅读 · 0 评论 -
union 和 struct 的区别与联系
union ( 共用体):构造数据类型,也叫联合体 用途:使几个不同类型的变量共占一段内存(相互覆盖) struct ( 结构体 ):是一种构造类型 用途: 把不同的数据组合成一个整体——自定义数据类型主要区别:1. struct和union都是由多个不同的数据类型成员组成, 但在任何同一时刻, union中只存放了一个被选中的成员; 而struct的所有成员都存在。在s原创 2014-07-01 14:43:08 · 2530 阅读 · 0 评论 -
ssacanf\Sprintf格式化字符串
一、sscanfsscanf() - 从一个 int sscanf(const char *buffer,const char *format,[argument ]...); buffer 存储的数据 format 格式控制字符串 argument 选择性设定字符串 sscanf会从buffer里读进数据,依照argument的设原创 2013-12-08 10:50:00 · 1514 阅读 · 0 评论 -
C语言变长数组 struct中char data[0]的用法
摘要:在实际的编程中,我们经常需要使用变长数组,但是C语言并不支持变长的数组。此时,我们可以使用结构体的方法实现C语言变长数组。struct MyData { int nLen; char data[0];}; 在结构中,data是一个数组名;但该数组没有元素;该数组的真实地址紧随结构体MyData之后,而这个地址就是结构体后面数据的地址(如果给这个结构原创 2013-12-08 09:47:08 · 1606 阅读 · 0 评论 -
Omap3530 的GPIO中断设置
Omap3530 的GPIO中断设置: 1.配置成GPIO,申请GPIO中断omap_cfg_reg(OMAP3_KBD_GPIO);配置成gpioif (gpio_request(OMAP3_KBD_GPIO, "kbd7279 IRQ") printk(KERN_ERR "Failed to request GPIO%d for kbd IRQ/n");//申请GPIO为中转载 2012-04-06 09:09:54 · 3025 阅读 · 0 评论 -
afx_msg函数意思
应用程序框架产生的消息映射函数例如:afx_msg void OnBnClickedButton1(); 其中 afx_msg为消息标志,它向系统声明:有消息映射到函数实现体;而在map宏定义中,就有具体消息和此函数的映射定义(可以是自定义,也可以是系统自动完成的)afx是 application framework如定义一个Edit的Change处理函数:一、在类的头文件(*原创 2012-05-03 09:47:40 · 12555 阅读 · 1 评论 -
MFc消息映射机制理解
何谓消息、消息处理函数、消息映射?消息简单的说就是指通过输入设备向程序发出指令要执行某个操作。具体的某个操作是你的一系列代码。称为消息处理函数。在SDK中消息其实非常容易理解,当窗口建立后便会有一个函数(窗口处理函数)开始执行一个消息循环,我们还可以清楚的看到消息处理的脉络。一个switch case语句就可以搞定,消息循环直到遇到WM_QUIT消息才会结束,其余的消息均被拦截后调用相应的处理转载 2012-05-08 10:35:09 · 1418 阅读 · 0 评论 -
UML中关联,聚合,组合的区别及C++实现
类间关系在类图中,除了需要描述单独的类的名称、属性和操作外,我们还需要描述类之间的联系,因为没有类是单独存在的,它们通常需要和别的类协作,创造比单独工作更大的语义。在UML类图中,关系用类框之间的连线来表示,连线上和连线端头处的不同修饰符表示不同的关系。类之间的关系有继承(泛化)、关联、聚合和组合。(1)继承:指的是一个类(称为子类)继承另外的一个类(称为基类)的功能,并增加它自己的新功能转载 2012-05-13 22:51:37 · 1661 阅读 · 0 评论 -
C++类静态成员与类静态成员函数
当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有对象共享。各个对象都拥有类中每一个普通数据成员的副本,但静态数据成员只有一个实例存在,与定义了多少类对象无关。静态方法就是与该类相关的,是类的一种行为,而不是与该类的实例对象相关。 静态数据成员的用途之一是统计有多少个对象实际存在。 静态数据成员不能在类中初始化,实际上类定义只是在描述对象原创 2012-05-16 19:15:08 · 1253 阅读 · 0 评论 -
C字符串数组赋值
C字符数组赋值举例如下:char a[10];1、定义的时候直接用字符串赋值char a[10]="hello";注意:不能先定义再给它赋值,如 char a[10]; a[10]="hello";这样是错误的!2、对数组中字符逐个赋值char a[10]={'h','e','l','l','o'};3、利用strcpychar a[10];原创 2012-08-09 21:38:59 · 50710 阅读 · 4 评论 -
主函数和子函数的传值传址例子
#include#include#includetypedef unsigned char Uint8; void *Test_Function(Uint8 **add)//返回堆空间,需要用二级指针{Uint8 *devInit=(Uint8 *)malloc(20*sizeof(Uint8));memcpy(devInit,"malloc address",si原创 2013-12-07 13:37:45 · 2235 阅读 · 0 评论 -
linux下c和c++互相调用
c调用cpp创建个目录 创建4个文件 c.c--c文件 cpp.cpp--c++文件 cpp.hh--c++声明文件 Makefilec.c[javascript] view plain copy #include "cpp.hh" int main() { cpp_fun(); } cpp.cpp[cpp] v转载 2017-02-15 22:20:40 · 1661 阅读 · 0 评论