
Linux编程
文章平均质量分 57
Justlinux2010
新浪微博 justlinux2010
展开
-
Linux下监测目录或文件的变化---inotify
inotify是用来监视文件系统事件的机制,在linux 2.6.13内核中引入。该机制可以用来监视文件和目录,当文件或目录发生变化时,内核会将文件或目录的变化发送给inotify文件描述符,在应用层只需调用read()就可以读取这些事件,非常的方便。更好的是,inotify文件描述符还可以使用select、poll、epoll这些接口来监听,当有事件发生是,inotify文件描述符会可读。原创 2013-03-16 15:15:41 · 21480 阅读 · 0 评论 -
CentOS下为自己编译安装的软件添加man page
打开/etc/man.config文件(不同系统下可能不一样),在文件中添加你自己的目录,格式为MANPATH /usr/local/git/share/man(你自己的目录)。之后就可以通过man命令查到你添加的man page对应的命令了。原创 2013-03-20 18:35:38 · 3094 阅读 · 0 评论 -
结构体中定义的联合成员可以直接访问!
内核中看到struct page中有如下的定义:struct page { unsigned long flags; /* Atomic flags, some possibly * updated asynchronously */ atomic_t _count; /* Usage count, see below. */ union { atomic_t _ma原创 2013-04-27 15:38:00 · 2577 阅读 · 0 评论 -
MooseFS中的APPNAME宏
在MooseFS的main函数(mfscommon/main.c)中看到下面的语句:cfgfile=strdup(ETC_PATH "/" STR(APPNAME) ".cfg");这个APPNAME的宏在代码中查找了所有引用(source insight)都没有找到定义的地方,但是编译的时候没有报错,并且用gdb调试的时候可以看到cfgfile的输出为“/usr/local/mfs-1.原创 2013-05-17 23:06:11 · 1659 阅读 · 0 评论 -
探究Linux下参数传递及查看和修改方法
X86-64下有16个64位寄存器,其中%rdi、%rsi、%rdx,%rcx、%r8、%r9用作传递函数参数,分别对应第1个参数、第2个参数直到第6个参数,如下图所示(图片来自网络): 如果函数的参数个数超过6个,则超过的参数直接使用栈来传递。在被调用函数执行前,会先将寄存器中的参数压入堆栈,之后的访问会通过栈寄存器加上偏移位置来访问。下面我们结合程序及其反汇编的结果来看一看。C语原创 2013-09-08 18:15:17 · 4704 阅读 · 0 评论 -
Linux下可执行程序调试信息的分离及release程序的调试
前两天在群里看到在讨论如何把debug版中的符号表加到release版本中,觉得这个非常有用,所以学习一下。使用的工具是objcopy。如果要生成单独的调试信息文件,命令如下:objcopy –only-keep-debug foo foo.dbg如果要去除调试信息(还可以使用strip命令),命令如下:objcopy --only-keep-debug原创 2013-09-12 15:07:57 · 5181 阅读 · 0 评论 -
gcc中的constructor属性和destructor属性
constructor属性可以使函数在main()函数之前执行,destructor属性会让函数在main()函数完成或调用exit()之后被执行。这些属性可以用来在程序运行之前初始化所需的数据,非常有用。而且这两个属性都还可以指定优先级,控制使用修饰的函数的执行顺序,优先级的值必须大于100,因为0到100之间的优先级由gcc来使用,优先级的值越小,优先级越高,会优先执行。另外还有一点需要注意,原创 2013-09-14 22:52:54 · 5393 阅读 · 0 评论