随笔分类 -  linux

摘要:转载自:http://www.oschina.net/translate/linux-kernel-coding-style这是一篇用来描述 linux 内核的首选编码样式的短文档。每个人都有自己的编码风格,我不会 将我的观点强加到任何人的身上,但这正是我所要保持的东西,就像其他许多事情一样。至少请考虑在这里所列出的观点。首先,我建议打印出GNU编码标准的副本,不要去阅读,而是将这个典范刻录下来。好,现在正式开始:第1章:缩进T一个Tab键有8个字符位因此一个缩进也是8个字符位. 有人试图将一个缩进定义场4个字符位甚至2个, 这无异于试图将Pi的值定义为3.说明: 缩进的意义在于定义语句块的开 阅读全文
posted @ 2013-01-09 23:12 zaleilynn 阅读(536) 评论(0) 推荐(0)
摘要:unlink的特殊地方: unlink一般用于服务进程,进程在unlink时不会立刻删除文件,而是在进程终止时删除文件,一些服务程序通过文件及对文件加锁来保持进程的唯一性,为了保证程序没有正常结束下次再启动时能正常启动,程序会在开始时新建一个文件然后调用unlink。原理就是,它减少了该文件的链接数,如果再没有程序打开它,那么它就会被系统删除。(程序结束之后会关闭打开它的文件句柄)。下面是一个简单的介绍:linux中每一个文件,都可以通过一个struct stat的结构体来获得文件信息,其中一个成员st_nlink代表文件的链接数。当通过shell的touch命令或者在程序中open一个带有. 阅读全文
posted @ 2013-01-07 23:53 zaleilynn 阅读(812) 评论(0) 推荐(0)
摘要:转载自:http://hi.baidu.com/tianhua_sun/item/401166c90f874a03ad092f011. struct epoll_event 结构体epoll_event 被用于注册所感兴趣的事件和回传所发生待处理的事件,定义如下: typedef union epoll_data { void *ptr; int fd; __uint32_t u32; __uint64_t u64; } epoll_data_t;//保存触发事件的某个文件描述符相关的数据 struct epoll_event { __uint32_t events; /* epoll eve 阅读全文
posted @ 2013-01-07 15:13 zaleilynn 阅读(1093) 评论(0) 推荐(0)
摘要:转载自:http://zhoulifa.bokee.com/3700951.html作为一个Linux系统下的C程序员,你可能发现调试程序是个比较麻烦的工作,虽然已经有gdb,kgdb等专业的调试软件,但如果对这些软件运用不熟练是根本达不到调试程序找出bug的目的的。又或者你对gdb已经很熟了,但运行gdb开始调试后在哪里设置断点成了你头痛的问题?当然,你可以从程序开始就以单步运行step by step来调试程序,但这会耗去你很多时间。如果你能很好地跟踪并记录程序的运行情况,那么一切将变得简单。下面我以一个实例说明我是如何操作的:首先我有一个程序主体main,其代码如下:////////// 阅读全文
posted @ 2013-01-06 13:55 zaleilynn 阅读(172) 评论(0) 推荐(0)
摘要:转载自http://www.searchtb.com/2012/09/tls.html现在使用多线程开发越来越普遍, 为了提高性能,性能局部变量使用也非常普遍.如线程私有的成员变量,buffer等.本文首先介绍线程局部变量的2 种使用方法:1). 常规的使用方式: 相对复杂2). __thread 修饰符: 使用简单,但容易不正确使用最后介绍封装的线程局变量操作接口,来解决上述两种使用方法的不足.该方法主要参考了 ACL 库关于这块的实现.1 常规的使用方式123456789#include <pthread.h>int pthread_once(pthread_once_t *o 阅读全文
posted @ 2013-01-06 13:41 zaleilynn 阅读(1257) 评论(1) 推荐(0)
摘要:EAGAIN 表明在非阻塞模式下调用了阻塞操作,在该操作没有完成就返回这个错误,可以重新尝试此操作EINTR 指操作由于终端而未能成功,可以重新尝试 阅读全文
posted @ 2013-01-06 13:29 zaleilynn 阅读(203) 评论(0) 推荐(0)
摘要:man: #include <stdarg.h> void va_start(va_list ap, last); type va_arg(va_list ap, type); void va_end(va_list ap); void va_copy(va_list dest, va_list src);1:当无法列出传递函数的所有实参的类型和数目时,可用省略号指定参数表void foo(...);void foo(parm_list,...);2:函数参数的传递原理函数参数是以数据结构:栈的形式存取,从右至左入栈.eg:#includevoid fun(int a, ...){ 阅读全文
posted @ 2013-01-06 10:48 zaleilynn 阅读(276) 评论(0) 推荐(0)
摘要:信号量函数由semget、semop、semctl三个函数组成。下面的表格列出了这三个函数的函数原型及具体说明。1. semget函数原型semget(得到一个信号量集标识符或创建一个信号量集对象)所需头文件#include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h>函数说明得到一个信号量集标识符或创建一个信号量集对象并返回信号量集标识符函数原型int semget(key_t key, int nsems, int semflg)函数传入值key0(IPC_PRIVATE):会建立新信号量集对 阅读全文
posted @ 2013-01-06 10:07 zaleilynn 阅读(738) 评论(0) 推荐(0)
摘要:先看看 shmctl()原型:intshmctl ( int shmqid, int cmd, struct shmid_ds *buf );返回:成功为0,失败 为-1这个特殊的调用和semctl()调用几乎相同,因此,这里不进行详细的讨论。有效命令的值是:IPC_STAT:检索一个共享段的shmid_ds结构,把它存到buf参数的地址中。IPC_SET:对一个共享段来说,从buf参数中取值设置shmid_ds结构的ipc_perm域的值。IPC_RMID:把一个段标记为删除IPC_RMID命令实际上不从内核删除一个段,而是仅仅把这个段标记为删除,实际的删除发生在最后一个进程离开这个共享段时 阅读全文
posted @ 2013-01-06 09:55 zaleilynn 阅读(215) 评论(0) 推荐(0)
摘要:共享内存函数由shmget、shmat、shmdt、shmctl四个函数组成。下面的表格列出了这四个函数的函数原型及其具体说明。1. shmget函数原型shmget(得到一个共享内存标识符或创建一个共享内存对象)所需头文件#include <sys/ipc.h>#include <sys/shm.h>函数说明得到一个共享内存标识符或创建一个共享内存对象并返回共享内存标识符函数原型int shmget(key_t key, size_t size, int shmflg)函数传入值key0(IPC_PRIVATE):会建立新共享内存对象大于0的32位整数:视参数shmf 阅读全文
posted @ 2013-01-05 15:05 zaleilynn 阅读(892) 评论(0) 推荐(0)
摘要:__attribute__ 可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。__attribute__ 后面紧跟一对括号,里面是相应的__attribute__参数。__attribute__ 语法格式为:__attribute__ ((attribute-list)) 位置为:放于函数等声明尾部的 ; 之前。函数属性(Function Attribute)函数属性帮助开发者把一些特性添加到函数声明中,可以使编译器在错误检查方面的功能更强大。__attribute__机制也很容易同非GNU应用 阅读全文
posted @ 2013-01-04 18:45 zaleilynn 阅读(792) 评论(0) 推荐(0)
摘要:GNU C的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。__attribute__书写特征是:__attribute__前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute__参数。__attribute__语法格式为:__attribute__ ((attribute-list))其位置约束为:放于声明的尾部“;”之前。函数属性(Function Attribute) 阅读全文
posted @ 2013-01-04 18:43 zaleilynn 阅读(188) 评论(0) 推荐(0)
摘要:内核使用了大量不同的宏来标记具有不同作用的函数和数据结构。如宏__init、__devinit等。这些宏在include/linux/init.h头文件中定义。编译器通过这些宏可以把代码优化放到合适的内存位置,以减少内存占用和提高内核效率。下面是一些常用的宏:l__init标记内核启动时使用的初始化代码,内核启动完成后不再需要。以此标记的代码位于.init.text内存区域。它的宏定义是这样的:#define __init __attribute__ ((__section__ (".text.init")))l__exit标记退出代码,如果驱动不是以模块存在的,则该用法无 阅读全文
posted @ 2013-01-04 18:33 zaleilynn 阅读(670) 评论(0) 推荐(0)
摘要:函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别。 malloc()函数有一个参数,即要分配的内存空间的大小: void *malloc(size_t size); calloc()函数有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小。 void *calloc(size_t numElements,size_t sizeOfElement); 如果调用成功,函数malloc()和函数calloc()都将返回所分配的内存空间的首地址。 函数malloc()和函数calloc(... 阅读全文
posted @ 2013-01-04 18:04 zaleilynn 阅读(238) 评论(0) 推荐(0)
摘要:Linux下这2个IP地址转换函数,可以在将IP地址在“点分十进制”和“整数”之间转换而且,inet_pton和inet_ntop这2个函数能够处理ipv4和ipv6。算是比较新的函数了。inet_pton函数原型如下[将"点分十进制" -> "整数"]#include <sys/types.h>#include <sys/socket.h>#include <arpa/inet.h>int inet_pton(int af, const char *src, void *dst);//这个函数转换字符串到网络地 阅读全文
posted @ 2013-01-04 14:00 zaleilynn 阅读(244) 评论(0) 推荐(0)
摘要:1.ctags(1)到http://ctags.sourceforge.net/下载ctags源码ctags-5.6.tar.gzhttp://prdownloads.sourceforge.net/ctags/ctags-5.6.tar.gz(2)解压并安装tar zxvf ctags-5.6.tar.gzcd ctags-5.6./configure && make && make install(3)使用[/home/brimmer/src]$ ctags -R"-R"表示递归创建,也就包括源代码根目录下的所有子目录下的源程序。&quo 阅读全文
posted @ 2012-06-04 15:44 zaleilynn 阅读(323) 评论(0) 推荐(0)
摘要:这是apache与SElinux冲突问题: SELINUX有「disabled」「permissive」,「enforcing」3种选择。Disabled就不用说了,permissive就是Selinux有效,但是即使你违反了策略的话它让你继续操作,但是把你的违反的内容记录下来。在我们开发策略的时候非常的有用,相当于Debug模式。 Enforcing就是你违反了策略,你就无法继续操作下去。[root@hostname lib64]# getenforceEnforcing[root@hostname lib64]# setenforce 0[root@hostname lib64]# get 阅读全文
posted @ 2012-05-27 15:01 zaleilynn 阅读(136) 评论(0) 推荐(0)
摘要:fstab文件格式:下面是/etc/fstab文件的一个示例行:fs_spec fs_mount point fs_type fs_parameter fs_dump fs_pass /dev/hda1 / ext2 defaults 1 1fs_spec:硬盘装置档名或该装置的Label fs_parameter:参数內容意義内容意义async/sync 非同步/同步设定硬盘是否以非同步方式运作!预设为async(效能较佳)auto/noauto 自动/非自动当下达mount -a时,此文件系统是否会被主动测试挂载。 预设为auto。rw/ro 可读... 阅读全文
posted @ 2012-05-16 15:10 zaleilynn 阅读(329) 评论(0) 推荐(0)
摘要:1. console是输出设备,tty是字符设备2. console是虚拟设备,映射到真正tty上面3. 阅读全文
posted @ 2012-05-14 21:02 zaleilynn 阅读(289) 评论(0) 推荐(0)
摘要:每个设备号又分为主设备号和次设备号。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux有约定俗成的编号,如硬盘的主设备号是3。-------------------------------------------------------------------------------------------------------------------------------------------------------------Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,称为设备文件。应用程序可以打 阅读全文
posted @ 2012-05-14 20:41 zaleilynn 阅读(336) 评论(0) 推荐(0)