随笔分类 -  Linux

上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 22 下一页
摘要:来自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 阅读(1030) 评论(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 阅读(605) 评论(0) 推荐(0) 编辑
摘要:printf, g_message这些函数中,使用 %lld 就可以打印一个unsigned long long了,glib中的guint64就是unsigned long long。这是GNU编译器支持的。在微软的编译器中,使用%lld, %I64都可以。 阅读全文
posted @ 2011-03-26 10:20 super119 阅读(22541) 评论(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 阅读(1522) 评论(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 阅读(1537) 评论(0) 推荐(0) 编辑
摘要:diff -u -d xxx xxx 即可 可以再加-r,这样就可以直接针对两个目录做diff比较,也就是diff -u -d -r <dir A> <dir B> 阅读全文
posted @ 2011-03-26 10:18 super119 阅读(299) 评论(0) 推荐(0) 编辑
摘要:RTM: inet_aton() doesn't appear to support IPv6, inet_pton does. The parameter lists are different. The return values are different. inet_pton() requires a four part dot notation and inet_aton can process some other presentation formats. Don't be surprised that you will encounter similar and 阅读全文
posted @ 2011-03-26 10:17 super119 阅读(1497) 评论(0) 推荐(0) 编辑
摘要:How to generate coredump file and debug it in gdb 1. ulimit -a 可以查看当前所有的limit 2. ulimit -c用来设置coredump。比如:ulimit -c unlimited,就设置不限制生成的coredump文件的大小。也可以ulimit -c 1024,这样就设置了coredump文件大小不超过1M。 3. 运行程序crash之后,core文件生成。此时: gdb <program> <corefile> 或者直接运行gdb,然后在gdb的命令行中输入:core <corefile&g 阅读全文
posted @ 2011-03-26 10:16 super119 阅读(1250) 评论(0) 推荐(0) 编辑
摘要:性能测试中,Tester程序由start.sh脚本来启动。现在的需求是:用户按下ctrl-c,程序能graceful退出,从而不用重启板子。问题 是:ctrl-c产生信号SIGINT,但是这个信号是传递给脚本进程的,不是传递给Tester进程的。所以这里就存在一个信号传递的问题。解决办法如 下: 1. 在脚本中加入代码: Code: Select allforward_sigint(){ # check out the tester's pid testerpid=$(cat /tmp/tester.pid) kill -2 $testerpid # call analyser and 阅读全文
posted @ 2011-03-26 10:15 super119 阅读(1015) 评论(0) 推荐(0) 编辑
摘要:ignore SIGCHLD信号的作用 -- 防止僵尸进程的产生 signal(SIGCHLD, SIG_IGR); //忽略SIGCHLD信号,这常用于并发服务器的性能的一个技巧 //因为并发服务器常常fork很多子进程,子进程终结之后需要 //服务器进程去wait清理资源。如果将此信号的处理方式设为 //忽略,可让内核把僵尸子进程转交给init进程去处理,省去了 //大量僵尸进程占用系统资源。(Linux Only) Code: Select allsome code();pid = fork(); //生成一个子进程if (pid < 0) // error check. hand 阅读全文
posted @ 2011-03-26 10:15 super119 阅读(1202) 评论(0) 推荐(0) 编辑
摘要:#include<stdio.h>#include<string.h>intmain(){chara;memset(&a,0xff,1);if(a==0xff)printf("Equal.\n");elseprintf("Notequal.\n");return0;}答案是不相等。可以用gdb来看,a变量在内存中的确是0xff,因为使用memset设置的。但是,由于a的类型是char,最大只能到0x7f,所 以,在做==比较的时候,0xff已经超过了char语义上的限制,所以,相等不成立。如果a是unsigned char 阅读全文
posted @ 2011-03-26 10:10 super119 阅读(1419) 评论(0) 推荐(0) 编辑
摘要:格式: x /nfu <addr>说明x 是 examine 的缩写n表示要显示的内存单元的个数f表示显示方式, 可取如下值x 按十六进制格式显示变量。d 按十进制格式显示变量。u 按十进制格式显示无符号整型。o 按八进制格式显示变量。t 按二进制格式显示变量。a 按十六进制格式显示变量。i 指令地址格式c 按字符格式显示变量。f 按浮点数格式显示变量。u表示一个地址单元的长度b表示单字节,h表示双字节,w表示四字节,g表示八字节Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),t(binary 阅读全文
posted @ 2011-03-26 10:09 super119 阅读(22466) 评论(0) 推荐(1) 编辑
摘要:1. ld的-static开关加上之后,就可以编译出一个静态链接的程序了。要注意该程序用到的所有的库,都要有相应的.a版本,编译的时候作为一个source file放到命令行中即可。光有库的.so没用,需要重新编译该库,让它生成.a文件。2. 要注意ld的一个特性:当ld查找一个symbol的时候,ld只会往后查找,不会往前查找。比如程序以来两个库A和B,而A库又调用了B库中的函数,那 么编译的时候,在命令行上,A库文件要出现在B库文件的前面。当ld发现A库中某个函数找不到时,他就会往后查找,于是在B库中找到了这个函数,OK。如 果AB两个库互相依赖,那么一般命令行中要写成A B A或B A 阅读全文
posted @ 2011-03-26 10:07 super119 阅读(693) 评论(0) 推荐(0) 编辑
摘要:很多 CPU ,如基于 Alpha, IA-64, MIPS, 和 SuperH 体系的,拒绝读取未对齐数据。当一个程序要求其中之一的 CPU 读取未对齐数据时,这时 CPU 会进入异常处理状态并且通知程序不能继续执行。举个例子,在 ARM, MIPS, 和 SH 硬件平台上,当操作系统被要求存取一个未对齐数据时默认通知应用程序一个异常。对齐性 对齐性是一种内存地址的特性,表现为内存地址模上 2 的幂。例如,内存地址 0x0001103F 模 4 结果为 3 ;这个地址就叫做与 4n + 3 对齐, 4 指出了所选用的 2 的幂的值。内存地址的对齐性取决于所选择的关于 2 的幂值。同样的地址模 阅读全文
posted @ 2011-03-26 10:06 super119 阅读(444) 评论(0) 推荐(0) 编辑
摘要:man fifo to see detail informations.In linux, if an application opened a pipe while another side hasn't opened this pipe, the open will block.You can use `mknod' with S_FIFO attribute to create a FIFO(named pipe), then use open/read/write just as usual. 阅读全文
posted @ 2011-03-26 10:05 super119 阅读(195) 评论(0) 推荐(0) 编辑
摘要:getopt函数可以用来非常方便的处理命令行参数。函数的原型是:int getopt(int argc, char * const argv[], const char *optstring);以下是关键点:1. argc, argv就是main函数的那两个。optstring是我们给出的格式字符串,特别的是格式字符串中的:表示该command option后面是有一个value的,比如:./xtop -n 20 -i 2 1111,在这里optstring就可以写成"n:i:",这表示n和i这两个是command option,而且这两个option后面都需要给value 阅读全文
posted @ 2011-03-26 10:05 super119 阅读(524) 评论(0) 推荐(0) 编辑
摘要:有时我们需要读取链接文件指向的内容,比如,给定一个进程的fd,我们想知道这个fd具体是什么东西,那么,就可以在/proc/<pid>/fd目录下看到该fd指向的内容,只不过这个目录下该fd是一个链接文件,我们需要的是该文件指向的内容。此时就可以用readlink这个system call,具体用法很简单,比如:Code: Select all char proc_fd_path[255]; char fd_des_buf[255]; ssize_t fd_des_len; /* Get fd descriptions, fd is the input parameter */ sp 阅读全文
posted @ 2011-03-26 10:04 super119 阅读(901) 评论(0) 推荐(0) 编辑
摘要:glibc提供了backtrace这个库函数,可以用来打印call stack。这个对于debug非常的有帮助。比如我们可以在程序中注册常见的一些signal,比如SIGSEGMENT, SIGPIPE,然后在这些信号的回调函数中,利用backtrace打印出call stack,这样debug就非常的方便。backtrace的使用很简单,使用man手册中的Example代码即可,例如:Code: Select all char strbuffer[1024]; int errcode; int btnum = 0; void *btbuf[100]; char **btstrings = N 阅读全文
posted @ 2011-03-26 10:04 super119 阅读(1175) 评论(0) 推荐(0) 编辑
摘要:semaphore很类似windows下的kernel object,一旦创建,可以被多个进程使用,当然一个进程中多个线程也可以使用semaphore来互斥。谈到互斥,一般semaphore的值就是 1。man 7 sem_overview可以看到很多有用的信息,再结合sem_open, sem_wait, sem_post这些函数的man手册,就可以把程序编的七七八八了。Semaphore和pipe一样,也有有名的和无名的两种。无名的嘛,在父子进程间使用比较方便,有名的嘛,在不搭界的多进程中使用很方便。这里贴一段代码,代码最能说明问题,其他都参考manual就OK了。在Fix TI的一个bu 阅读全文
posted @ 2011-03-26 10:03 super119 阅读(2153) 评论(0) 推荐(0) 编辑

上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 22 下一页