随笔分类 - linux
linux driver编译环境搭建和命令
摘要:首先将ubuntu14.04的内核升级到内核3.18.12。其次,Ubuntu14.04上驱动编译命令$ sudo make -C ~/linux-3.18.12/ M=`pwd` modulesNote:modules不代表特殊模块,是固定名称,不可更改。Makefile参考格式:#sample ...
阅读全文
export LD_LIBRARY_PATH=/opt/gtk/lib:$LD_LIBRARY_PATH
摘要:如题,临时修改程序运行时动态库的搜索路径,平时经常会用到,记录之!
阅读全文
Linux下守护进程初探
摘要:守护进程一直后台运行,与终端脱离,一般负责周期性地执行系统任务,服务器应用一般以守护进程进行运行。实现一个守护进程主要分为5部:1.脱离父进程2.setsid(可以选择再次fork)3.umask4.close 打开的描述符5.chdir待续。。。。。。。。。。
阅读全文
浅析Linux下进程间通信:共享内存
摘要:浅析Linux下进程间通信:共享内存共享内存允许两个或多个进程共享一给定的存储区。因为数据不需要在客户进程和服务器进程之间复制,所以它是最快的一种IPC。使用共享内存要注意的是,多个进程之间对一给定存储区的同步访问。主要用到的函数有:shmget(),shmctl(),shmat(),shmdt()...
阅读全文
select与poll函数介绍
摘要:select与poll函数介绍在所有依从POSIX的平台上,select函数使我们可以执行I/O多路转接。传向select的参数告诉内核:1)我们所关心的描述符2)对于每个描述符我们所关心的状态(是否读一个给定的描述符?是否想写一个给定的描述符?是否关心一个描述符的异常状态?)3)愿意等待多长时间(可以永远等待,也可以等待一个固定量时间,或完全不等待)从select返回时,内核告诉我们:1)已准备好的描述符的数量2)对于读、写或异常这三个状态中的每一个,哪些描述符已准备好使用这些返回信息,就可以调用相应的I/O函数(一般是read或write),并且确知该函数不会阻塞。函数原型:#includ
阅读全文
STREAMS流机制
摘要:STREAMS流机制基本概念STREAMS(流)是系统V提供的构造内核设备驱动程序和网络协议包的一种通用方法,对STREAMS进行讨论的目的是为了理解系统V的终端接口,I/O多路转接中poll(轮询)函数的使用,以及基于STREAMS的管道和命名管道的实现。流在用户进程和设备驱动程序之间提供了一条全双工通路。流无需和实际硬件设备直接会话,流也可以用来构造伪设备驱动程序。在流首(stream head)之下可以压入处理模块,这可以用ioctl命令实现。STREAMS模块是作为内核的一部分执行的,这类似于设备驱动程序。当构造内核时,STREAMS模块联编进入内核。STREAMS消息STREAMS的
阅读全文
记录锁
摘要:记录锁基本概念若两个人同时编辑一个文件,其后果将如何呢?在很多unix系统中,该文件的最后状态取决于写该文件的最后一个进程。但是对于有些应用程序(例如数据库),进程有时需要确保它正在单独写一个文件。为了向进程提供这种功能,商用unix系统提供了记录锁机制。记录锁的功能是:当一个进程正在读或修改文件的某个部分时,它可以阻止其他进程修改同一文件区。对于unix系统而言,"记录"该词并不恰当,更适合的术语可能是字节范围锁(byte-range locking),因为它锁定的只是文件中的一个区域(当然,也可能是整个文件)。POSIX.1 形式记录锁本文主要介绍POSIX.1的fcn
阅读全文
非阻塞I/O
摘要:非阻塞I/O非阻塞I/O使我们可以调用open、read和write这样的I/O操作,并使这些操作不会永远阻塞。如果这种操作不能完成,则调用立即出错返回,表示该操作若继续执行将阻塞。对一个给定的描述符,有两种方法对其指定非阻塞I/O:(1) 如果调用open获得描述符,则可指定O_NONBLOCK标志。(2) 对于已经打开的一个描述符,则可调用fcntl,由该函数打开O_NONBLOCK文件状态标志。示例程序:对一个文件描述符打开一个或多个文件状态标志#include #include void set_fl(int fd, int flags) //flags are file statu.
阅读全文
僵尸进程小结(转)
摘要:僵尸进程In UNIX System terminology, a process that has terminated,but whose parent has not yet waited for it, is called a zombie. 在UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他, 那么他将变成一个僵尸进程。 但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程, 因为每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程, 看有没有哪个进程是刚刚结束的这个进程的子进程,如果是的话,就由Init 来接管他,成为
阅读全文
Linux下守护进程的编程实现(转)
摘要:守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程是一种很有用的进程。Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任务。比如,作业规划进程crond,打印进程lpd等。守护进程的编程本身并不复杂,复杂的是各种版本的Unix的实现机制不尽相同,造成不同Unix环境下守护进程的编程规则并不一致。这需要读者注意,照搬某些书上的规则(特别是BSD4.3和低版本的System V)到Linux会出现错误的。下面将全面介绍Linux下守护
阅读全文
gcc 中-I、 -L 与-l选项的作用
摘要:在makefile中经常会看到这些选项,简要说明其作用:-I后面紧跟着用户设定的编译器头文件查找路径如: -I/my_include_path/-L后面紧跟着用户设定的编译器库文件查找路径如: -L/my_lib_search_path/-l用来指明编译器要链接哪些库如: gcc test.c -o test -lmylibname
阅读全文
linux文件编程
摘要:一、系统调用方式1.文件描述符内核利用文件描述符来访问文件,文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。2.int open(const char *pathname, int flags) int open(cosnt char *pathname, int flags, mode_t mode) 描述:Given a pathname for a file, open() returns a file descriptor, a small,nonnegative integer for use in subsequent system calls...
阅读全文
linux时间编程
摘要:1.time_t time(time_t *t)功能: 成功:返回日历时间,单位为秒 失败:返回-12.struct tm *gmtime(const time_t *timep)功能:成功:将参数timep所指定的日历时间转换为世界标准时间(即格林威治时间)失败:返回NULLstruct tm{ int tm_sec; int tm_min; int tm_hour; int tm_mday /* day of the month */ int tm_mon; int tm_year; int tm_wday; /* day of the week */ ...
阅读全文
gdb与coredump
摘要:一、GDB的使用1.gdb的主要功能启动被调试程序、指定位置停住程序、程序被停住时,查看程序状态(如变量值)2.使用说明gcc -g test.c -o test -g使程序可被调试gdb test 启动gdbbreak main第一个休息点:在main函数处设置断点run 运行程序list(l) 查看程序代码break(b) 函数名 在某函数入口处添加断点break 行号 在指定行添加断点break 文件名:行号 在指定文件指定行添加断点info break 查看所有设置的断点delete 断点编号(info break显示出来的Num)删除指定断点pri...
阅读全文
linux下静态库、动态库的创建与使用
摘要:一、静态编译gcc -static a.c -o a.out gcc默认使用动态链接二、静态库的创建与使用 gcc -c mylib.c -o mylib.o 只编译不链接 ar cqs libmylib.a mylib.o 将*.o文件打包成库 cp libmylib.o /usr/lib/ gcc -static test.c -lmylib -o test gcc在链接时,默认只会链接C函数库,而对于其他的函数库 ,则需要使用-l选项来显示地指明需要链接三、动态库(共享库)的创建与使用 gcc -c mylib.c -o my...
阅读全文