上一页 1 ··· 38 39 40 41 42 43 44 45 46 ··· 71 下一页
摘要: 区别很简单,看这两个函数的man手册就能看的出来。简单来说,memmove是把一堆byte从src移到dst,memcpy是把一堆byte从 src拷贝到dst,最大不同的是:memmove是先把一堆byte拷贝到一个临时的array中,然后再把这个临时的array写到dst中去;而 memcpy没有这个逻辑,直接就是从src一个一个字节的读,同时往dst一个一个字节的写。这样就导致了一个最根本的不同: memcpy不适合或者说不能处理src和dst两块内存有重叠(overlap)的情况。因为memcpy是直接从src拷贝,然后往dst中写,这样,如果src和dst两块内存有重叠,这样就会导致 阅读全文
posted @ 2011-03-26 10:25 super119 阅读(625) 评论(1) 推荐(0) 编辑
摘要: 在看lftp的源代码的时候,看到了程序的一开头有这样几句代码: setlocale (LC_ALL, ""); setlocale (LC_NUMERIC, "C"); bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); 注:PACKAGE, LOCALEDIR都是宏,在autoconf的时候自动生成,PACKAGE宏就是lftp, LOCALEDIR就是/usr/share/locale 不明白有什么用,于是查了一下资料,写了一个测试程序,搞明白了。 setlocale是用来设置程序的l 阅读全文
posted @ 2011-03-26 10:25 super119 阅读(1105) 评论(0) 推荐(0) 编辑
摘要: 在看lftp的源代码的时候,发现这么一行: operator bool() const { return ... } 一下子没想起来,这是什么语法,是operator overload么?不像阿,怎么不以函数的返回值打头呢?后来一查C++ Primer,明白了,这是convert operator,也就是将这个类如果要转化成bool值的话,就会调用到这个函数。convert operator以operator关键字打头,紧跟类型,然后是两个括号(括号中不能带有参数)。更具体的看C++ Primer和上面的注释。 不过看明白了之后有个问题: operator int() const { .... 阅读全文
posted @ 2011-03-26 10:24 super119 阅读(408) 评论(0) 推荐(0) 编辑
摘要: 来自interview的一个考题,所以写了一个测试程序来demonstrate一下。 func是一个函数指针,该函数返回值是int,没有输入参数;然后主程序中声明了一个函数指针myFuncPointer,该函数指针代表的函 数输入参数是一个int,返回值也是一个函数指针,类型就是func类型的。所以我们可以把func2这个函数赋给myFuncPointer这个指针。 interview的题目要的就是myFuncPointer这个指针的声明。 #include<stdio.h>typedefint(*func)();intfunc3(){printf("Infunction 阅读全文
posted @ 2011-03-26 10:23 super119 阅读(1028) 评论(0) 推荐(0) 编辑
摘要: 1.classA{public:A(){func(0);};virtualvoidfunc(intdata){printf("A1:%d\n",data);}virtualvoidfunc(intdata)const{printf("A2:%d\n",data);}voidfunc(char*str){printf("A3:(%s)\n",str);}};classB:publicA{public:voidfunc(){printf("B1:%s\n","");}voidfunc(intdata 阅读全文
posted @ 2011-03-26 10:22 super119 阅读(557) 评论(0) 推荐(0) 编辑
摘要: 在gstreamer的源码中,看到了GST_BOILERPLATE_FULL宏的定义,原来在这个宏中就定义着_base_init, _init, _class_init这些函数的原型,难怪我们的源码中不需要定义这些函数原型呢,而且这个宏中最重要的就是可以说明我们的plugin是继承自哪个 class的(看GObject的相关内容),而且这个宏最重要的就是调用了gst_type_register_static_full函数,将 _base_init, _init, interface等等这些内容全部注册进了gstreamer。 OK,在这个宏的定义部分,就看到了##这样的代码,这是什么意思?这其 阅读全文
posted @ 2011-03-26 10:21 super119 阅读(603) 评论(0) 推荐(0) 编辑
摘要: printf, g_message这些函数中,使用 %lld 就可以打印一个unsigned long long了,glib中的guint64就是unsigned long long。这是GNU编译器支持的。在微软的编译器中,使用%lld, %I64都可以。 阅读全文
posted @ 2011-03-26 10:20 super119 阅读(22447) 评论(1) 推荐(1) 编辑
摘要: rtspplayer这个程序在手机上运行的时候,要使用fbsink来作为video sink组件。这是使用了framebuffer的一个video sink组件。所以在代码中,很自然只需要在gst_element_factory_make的时候将xvimagesink换成fbsink就可以 了。但是程序在scratchbox中编译了之后,传到了手机上,运行却发生错误,报告说: No such element ...... `fbsink' 奇怪的是在手机上使用alp-gst-inspect|grep "fbsink"却能查到这个element。后来才知道,fbsin 阅读全文
posted @ 2011-03-26 10:19 super119 阅读(1520) 评论(0) 推荐(0) 编辑
摘要: 共享库的初始化和~初始化函数分析 转载时请注明出处:http://blog.csdn.net/absurd/ Win32下可以通过DllMain来初始化和~初始化动态库,而Linux下则没有与之完全对应的函数,但可以通过一些方法模拟它的部分功能。有人会说,很简单,实现_init/_fini两个函数就行了。好,我们来看看事实是不是这样的。 很多资料上都说可以利用_init/_fini来实现,而我从来没有测试成功过,原因是这两个函数都已经被gcc占用了。比如: test.c Code: Select all#include <stdio.h> void _init(void){ pri 阅读全文
posted @ 2011-03-26 10:18 super119 阅读(1508) 评论(0) 推荐(0) 编辑
摘要: diff -u -d xxx xxx 即可 可以再加-r,这样就可以直接针对两个目录做diff比较,也就是diff -u -d -r <dir A> <dir B> 阅读全文
posted @ 2011-03-26 10:18 super119 阅读(296) 评论(0) 推荐(0) 编辑
上一页 1 ··· 38 39 40 41 42 43 44 45 46 ··· 71 下一页