您正在查看 "linux_application" 分类下的文章
2009-10-14 21:59
epoll的使用需要文件系统的支持,文件系统需要支持poll的f_pos,ext2/3就不支持epoll。epoll的工作流程:
1. 初始化需要监听的fd,将注册ep_poll_callback到文件系统的inode的wait队列。
2. 当文件系统就绪,会唤醒其inode的wait队列上的进程,并调用1所注册的回调函数。(该回调函数会将就绪的fd加入到eventpoll的就绪队列(rdllist)中,并唤醒epoll_wait进程)
3. epoll_wait进程查询eventpoll就绪队列上的fd,将起相关信息copy到用户态,完成通知。
|
2009-10-10 19:25
可重入与异步信号安全
一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误。
《多线程编程指南》中定义,可以被信号控制器安全调用的函数被称为"异步信号安全"函数。
因此,我认为可重入与异步信号安全是一个概念。
|
2009-09-04 17:54
非常遗憾,HOOK的发展史不是那么清晰可见。事实上,HOOK到底是什么,很多人的说法都不一样。
最早是在操作系统中出现的HOOK概念。在Unix/Linux/Windows中都 有类似概念。当时提出的目的在于,允许用户在系统调用过程中,插入自己的代码处理特殊事情。典型的HOOK就是用自己的功能替换原有的函数点,在处理完成 之后,又恢复原有的函数点。(这里“点”就是表示一个可以使用HOOK勾住的位置)。
下面是《关于钩子》中,描述的Windows是中的钩子:
|
2009-08-24 20:41
GDB调试精粹及使用实例
|
| 来源:不详 (2006-07-14 11:18:05) |
|
|
2009-06-01 21:05
#include<stdlib.h>
#include<stdio.h>
#include<sys/types.h>
#include<sys/sysinfo.h>
#include<unistd.h>
#define __USE_GNU
#include<sched.h>
#include<ctype.h>
#include<string.h>
int main(int argc, char* argv[])
{
int num = sysconf(_SC_NPROCESSORS_CONF);
int created_thread = 0;
|
2009-05-20 23:32
autoconf和automake是啥?这要从类Unix系统的程序编译说起。一般一个真正的工程肯定不只一个文件,而多个文件的编译是件很麻烦的事情 (最简单的就是用gcc或者g 后面接着多个文件),再加上要推出跨平台的(一般只是跨不同的类Unix平台),还有啥包依赖啊什么的,很麻烦嗯。于是就有了一个工具叫make,它接收 一个名为Makefile的文件作为参数,自动地进行编译,还可以在Makefile里设置接受不同的选项,然后人们就可以make install、make all什么的了。
然而不同系统的编译要用不同的编译参数,但是开源软件不 |
2009-05-13 16:02
在linux环境下调试多线程,总觉得不像.NET那么方便。这几天就为找一个死锁的bug折腾好久,介绍一下用过的方法吧。
多线程如果dump,多为段错误,一般都涉及内存非法读写。可以这样处理,使用下面的命令打开系统开关,让其可以在死掉的时候生成core文件。
ulimit -c unlimited
这样的话死掉的时候就可以在当前目录看到core.pid(pid为进程号)的文件。接着使用gdb:
gdb ./bin ./core.pid
进去后,使用bt查看死掉时栈的情况,在使用frame命令。
还 |
2009-04-23 20:02
摘要:本文深入分析了Linux环境下文件、进程及模块的高级隐藏技术,其中包括:Linux可卸载模块编程技术、修改内存映象直接对系统调用进行修改技术,通过虚拟文件系统proc隐藏特定进程的技术。
隐藏技术在计算机系统安全中应用十分广泛,尤其是在网络攻击中,当攻击者成功侵入一个系统后,有效隐藏攻击者的文件、进程及其加载的模块变得尤 为重要。本文将讨论Linux系统中文件、进程及模块的高级隐藏技术,这些技术有的已经被广泛应用到各种后门或安全检测程序之中,而有一些则刚刚起步,仍 然处在讨论阶段,应用很少 |
2009-04-14 15:44
援引CU上一篇帖子的内容:
“信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在semtake的时候,就阻塞在 哪里)。而互斥锁是用在多线程多任务互斥的,一个线程占用了某一个资源,那么别的线程就无法访问,直到这个线程unlock,其他的线程才开始可以利用这 个资源。比如对全局变量的访问,有时要加锁,操作完了,在解锁。有的时候锁和信号量会同时使用的”
也就是说,信号量不一定是锁定某一个资源,而是流程上的概念 |
2009-02-25 17:01
查看源程序
一、显示源代码
GDB 可以打印出所调试程序的源代码,当然,在程序编译时一定要加上-g的参数,把源程序信息编译到执行文件中。不然就看不到源程序了。当程序停下来以 后,GDB会报告程序停在了那个文件的第几行上。你可以用list命令来打印程序的源代码。还是来看一看查看源代码的GDB命令吧。
list <linenum>;
显示程序第linenum行的周围的源程序。
list <function>;
|