自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

joker0910的专栏

Light Up the sky!

  • 博客(135)
  • 资源 (2)
  • 收藏
  • 关注

转载 php变量作用域

摘自:http://www.qianyunlai.com.com/blog/220.html PHP 中的每个变量都有一个针对它的作用域,它是指可以在其中访问变量(从而访问它的值)的一个领域。对于初学者来说,变量的作用域是它们所驻留的页面。因此,如果你定义了 $var,页面余下部分就可以访问 $var,但是,其它页面一般不能访问它(除非使用特殊的变量)。  因为包含文件像它们是

2013-01-09 14:16:16 956

转载 基数树(radix tree)

原文基数(radix)树Linux基数树(radix tree)是将指针与long整数键值相关联的机制,它存储有效率,并且可快速查询,用于指针与整数值的映射(如:IDR机制)、内存管理等。IDR(ID Radix)机制是将对象的身份鉴别号整数值ID与对象指针建立关联表,完成从ID与指针之间的相互转换。IDR机制使用radix树状结构作为由id

2012-12-03 05:59:33 47494 2

转载 在ubuntu下安装配置ftp服务器

1、安装vsftpdsudo apt-get install vsftpd# vsftp(Very Secure FTP)是一种在Unix/Linux中非常安全且快速稳定的FTP服务器安装了之后会在/home/下建立一个ftp目录(即用户账户)。这时候你可以试着访问下ftp://IP地址。应该可以看到一个空白内容的ftp空间。如果使用ftp://username@ip则会打开相

2012-08-29 20:34:34 1038

转载 malloc背后的故事

本文主要分析内存以及I/O相关的系统调用和库函数的实现原理,根据原理给出在使用过程中需要注意的问题和优化的侧重点,本文涉及到的系统调用包括readahead,pread/pwrite,read/write,mmap,readv/writev,sendfile,fsync/fdatasync/msync,shmget,malloc。       本文先简单介绍应用程序对内存的使用以及I/O系统对

2012-08-28 07:02:15 3073

转载 doxygen简单使用

doxygen 是一个代码文档生成器,不过功能上还算不错,目前对中文支持也是很好。1. 首先从http://www.stack.nl/~dimitri/doxygen/ 下载一份最新的源程序,如果是源码包,那么用tar 打开./configure->make ->make install,那么就安装好了,如果是debian用户,现在源里面已经有,可以直接apt安装2. 安装好后可以

2012-08-28 06:49:00 804

原创 使用struct ifreq实现ifconfig

ifconfig是我们查看/设定网口状态常用的命令,其实这个命令就是对一些系统函数的封装,通过对struct ifreq的修改,我们可以很轻易地设定网口状态,获取网口状态。这个结构体位于头文件中,打开去看看吧,对照着英文注释,很容易找到自己想要的东西。而网卡相关的一些ioctl操作, 也就是用于查询/修改状态的标记位,都在中,很清晰的,找份源码看看吧。下面是一个小示例,演示了获取信息的过程,如

2012-08-12 00:09:27 13202

原创 一个奇怪的不可中断进程

写了个简单的驱动,以及应用层的读写程序。优先卸载了驱动,然后...应用程序卡在那里了,任凭你怎么kill,怎么重新装载驱动,都没有反应。。。/** * @file global_var.c * @author wzj * @brief competation * @version 1.1 * @note * @date: 2012年08月02日星期四23:39:28 *

2012-08-06 23:31:53 1593

转载 Linux 进程状态详解(转)

Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态。Linux进程状态:R (TASK_RUNNING),可执行状态。只有在该状态的进程才可能在CPU上运行。而同一时刻可能有多个进程处于可执行状态,这些进程的task_struct结构(进程控制块)被放入对应CPU的可执行队列中(一个进程最多只能出现在一个CPU的可执行队列

2012-08-06 23:21:26 1166

原创 linux 信号学习总结

一、可靠性与不可靠性:    1. 不可靠信号        主要由以下两个问题导致不可靠问题的发生:        a. 进程每次处理信号后, 就会对信号的响应设置为默认动作;如果用户不希望这样操作,就要在信号处理函数结尾再调用一次signal,进行重装。        b. 信号会丢失。        Linux支持不可靠信号,信号值小于SIGRTMIN的都是不可靠的, 但

2012-08-05 10:46:34 1128

转载 linux下/proc/stat 计算CPU利用率

一般来说对于需要大量cpu计算的进程,当前端压力越大时,CPU利用率越高。但对于I/O网络密集型的进程,即使请求很多,服务器的CPU也不一定很到,这时的服务瓶颈一般是在磁盘的I/O上。比较长见的就是,大文件频繁读写的cpu开销远小于小文件频繁读写的开销。因为在I/O吞吐量一定时,小文件的读写更加频繁,需要更多的cpu来处理I/O的中断。在Linux/Unix下,CPU利用率分为用户态,系统

2012-07-25 17:23:17 1153

转载 barrier 和 preempt_disable() 学习

#define preempt_disable() \do{ \ inc_preempt_count(); \ barrier(); \}while(0)一、这个barrier 在干什么...    内存屏障出现因为编译器或现在的处理器常会自作聪明地对指令序列进行一些处理,比如数据缓存,读写指令乱序执行等等。如果优化对象是普通内存,那么一般会提升性能而且不

2012-07-25 00:36:59 10009

转载 Linux lspci查看硬件设备

Linux 主机的硬件配备lspci 找到的是目前主机上面的硬件配备[root@www ~]# lspci [-vvn]选项与参数:-v     :显示更多的 PCI 接口装置的详细信息-vv :比 -v 还要更详细的信息-n     :直接观察 PCI 的 ID 而不是厂商名称查阅您系统内的 PCI 装置:[root@www ~]# lspci#不必加上任

2012-07-17 14:31:49 42097

转载 Linux 并发编程小结

一、可重入函数:可重入函数遵循以下三个特点。1.函数中不能使用任何非const的静态或者全局变量。这个比较好理解,共享的变量要保证是无法被修改的,大家都只作读取操作,自然没有竞争的问题。2.不能产生任何“副作用”, 即不能对所处的环境产生影响。修改磁盘上的共享文件,依赖于环境变量.....总之,这个函数是完全孤立的,不会改变任何运行环境中的因素,这也包括使用定义在局部的stat

2012-07-09 23:46:00 5940

转载 频繁分配释放内存导致的性能问题的分析

现象1 压力测试过程中,发现被测对象性能不够理想,具体表现为: 进程的系统态CPU消耗20,用户态CPU消耗10,系统idle大约70 2 用ps -o majflt,minflt -C program命令查看,发现majflt每秒增量为0,而minflt每秒增量大于10000。初步分析majflt代表major fault,中文名叫大错误,minflt代表minor fa

2012-07-03 06:43:40 1358

转载 GCC简单的宏录制

在我们进行文本编辑的时候,经常会遇到一些需要进行重复操作的情况,比如将如下的内容:#include "stdio.h"#include "stdio.h"#include "stdio.h"#include "stdio.h"更改为:#include #include #include #include 当然这只是个简单例子,实际的情况可能更

2012-06-26 23:35:58 766

原创 ELF在Linux下的加载过程

主要函数调用:sys_execve   | - do_execve|| - search_binary_handler                    |- linux_binfmt= elf_format       |- elf_format-> load_elf_binary| - elf_entry = load_elf_interp()

2012-06-24 09:07:21 7609

转载 TCP_DEFER_ACCEPT

from:  http://blog.csdn.net/yanook/article/details/72025531. 设置TCP_DEFER_ACCEPTint val = 10; // time_outif (setsockopt(sock_descriptor, IPPROTO_TCP, TCP_DEFER_ACCEPT, &val, sizeof(val))==

2012-06-23 20:34:38 947

转载 GOT(全局偏移表)和PLT(过程链接表)

全局偏移表(GOT)和过程链接表(PLT) ELF 格式的共享库使用 PIC 技术使代码和数据的引用与地址无关,程序可以被加载到地址空间的任意位置。PIC 在代码中的跳转和分支指令不使用绝对地址。PIC 在 ELF 可执行映像的数据段中建立一个存放所有全局变量指针的全局偏移量表 GOT对于模块外部引用的全局变量和全局函数,用 GOT 表的表项内容作为地址来间接寻址;对于本模

2012-06-22 17:36:15 1205

转载 HelloWorld... 不用C语言库,不用main函数

1.从程序员的自我修养上摘录的。2.这不是卖弄技巧,这是深入了解链接和编译。开始     使用c语言输出hello world,不用C语言库,不用main函数。怎么做?1. 我们需要printf这样的功能。2. 一段程序需要一个程序入口,C语言默认是main。     有这样的武器:1. GCC支持内嵌汇编。2. 使用汇编直接产生中断,可以使用系

2012-06-19 23:27:08 3381 1

原创 在驱动中写磁盘文件

驱动层是不可以调用标准库的,那么想要在驱动中直接写磁盘文件要怎么办?一、到底可不可行?这里的文章,详细地追踪了系统调用的实现,并提供了一种直接访问的方法。总结如下:     1.在系统调用open的流程中,会调用getname()函数,里面会使用get_fs()判断文件名字符串的地址,如果属于3~4G,也就是内核空间,返回错误。是用户空间的,则拷贝到内核空间。在系统调用read的流

2012-06-18 23:00:24 2608 1

原创 静态变量、全局变量在ELF文件中的位置

静态变量编译之后,被编译器放到了可执行文件的哪个字段? 以下实验在ubuntu10.04上完成,使用gcc4.4.3。测试源码如下:#include int g_val_init = 45;int g_val_uninit;static int s_global_inited = 12;static int s_global_uninited;stru

2012-06-17 22:20:27 10394

原创 ELF文件中section与segment的区别

1. ELF中的section主要提供给Linker使用, 而segment提供给Loader用,Linker需要关心.text, .rel.text, .data, .rodata等等,关键是Linker需要做relocation。而Loader只需要知道Read/Write/Execute的属性。a.out格式没有这种区分。(注意现在使用gcc编译出来的a.out文件只是取该名字而已,文件格式

2012-06-12 12:52:49 11086

转载 ELF和a.out文件格式的比较

本文讨论了 UNIX/LINUX 平台下三种主要的可执行文件格式:a.out(assembler and link editor output 汇编器和链接编辑器的输出)、COFF(Common Object File Format 通用对象文件格式)、ELF(Executable and Linking Format 可执行和链接格式)。首先是对可执行文件格式的一个综述,并通过描述 ELF 文件

2012-06-07 00:45:53 4896 1

原创 KMP--比较清晰的一份

/* * @FileName: simKMP.c * @Author: wzj * @Brief: * 1.测试版本的kmp * * * * * @History: * * * * @Date: 2012年06月03日星期日22:05:45 * */ #include #include #include //improved o

2012-06-03 23:41:07 778

原创 pthread---一次性初始化&&线程私有数据

一次性初始化    有时候我们需要对一些posix变量只进行一次初始化,如线程键(我下面会讲到)。如果我们进行多次初始化程序就会出现错误。    在传统的顺序编程中,一次性初始化经常通过使用布尔变量来管理。控制变量被静态初始化为0,而任何依赖于初始化的代码都能测试该变量。如果变量值仍然为0,则它能实行初始化,然后将变量置为1。以后检查的代码将跳过初始化。    但是在多线程程序设计中,

2012-06-03 14:11:10 9053 2

原创 进程之间<1>

调用fork之后, 生成的子进程继承了父亲的之前定义的句柄、局部变量、环境变量。也就是进程空间中,所有当前的数据。之后大家分道扬镳,各自为政。以下示例,展示了一种共享输出流造成的竞态。/* * @FileName: race.c * @Author: wzj * @Brief: * 1.1.演示一种简单的进程间竞态, * * * * * @Histo

2012-06-03 10:16:04 630

转载 Linux core 文件

1. core文件的简单介绍在一个程序崩溃时,它一般会在指定目录下生成一个core文件。core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的。 2. 开启或关闭core文件的生成用以下命令来阻止系统生成core文件:ulimit -c 0下面的命令可以检查生成core文件的选项是否打开:ulimit -a该命令将显示所有的用户定制,其中选项-a代表“al

2012-06-03 00:58:40 642

原创 Linux 2.6中在应用层获取线性时间

在应用层设置的一些计时器,往往在系统时间被修改之后就失效了,gettimeofday()就是这样一个让人又爱又恨的函数。如何在应用层获取一个不受系统时间影响的时间?linux2.6中提供了clock_gettime()函数,使用这个函数可以获得一个类似于jiffies的计数值,也可以获得当前的系统时间:#include #include #include #include int

2012-05-03 12:49:06 1397

转载 文件描述符、文件句柄、文件路径的转换接口

文件路径 到 文件指针:filepath --fopen()-->FILE*;   文件路径 到 文件描述符:filepath--open()--fd;   文件描述符 到 文件指针:fd--fdopen()-->FILE*;   文件描述符 到 文件路径:fd--readlink(/proc/%getpid()/fd/%fd"))-->filepath;    文件指针

2012-04-30 10:28:14 1480

原创 cpu绑定和cpu亲和性

将进程/线程与cpu绑定,最直观的好处就是提高了cpu cache的命中率,从而减少内存访问损耗,提高程序的速度。我觉得在NUMA架构下,这个操作对系统运行速度的提升有较大的意义,而在SMP架构下,这个提升可能就比较小。这主要是因为两者对于cache、总线这些资源的分配使用方式不同造成的,NUMA每个cpu有自己的一套资源体系, SMP中每个核心还是需要共享这些资源的,从这个角度来看,NUMA使用

2012-04-21 15:57:38 28792 4

转载 Linux 魔术键

根据Linux内核文档介绍:这是一组'魔术组合键',只要内核没有被完全锁住,不管内核在做什么事情,使用这些组合键可以立即打印出内核的信息。使用sysrq组合键是了解系统目前运行情况的最好方式。如果系统出现挂起的情况或者在诊断一些和内核相关,比较怪异,比较难重现的问题的时候,使用sysrq键是一个比较好的方式。如何打开和关闭SysRq组合键?为了安全起见,在红帽企业版

2012-04-17 08:57:25 6026

原创 乱序执行技术

乱序执行技术   乱序执行(out-of-orderexecution),是指CPU允许将多条指令不按程序规定的顺序分开发送给各相应电路单元处理的技术。这样将根据个电路单元的状态和各指令能否提前执行的具体情况分析后,将能提前执行的指令立即发送给相应电路单元执行,在这期间不按规定顺序执行指令,然后由重新排列单元将各执行单元结果按指令顺序重新排列。采用乱序执行技术的目的是为了使CP

2012-04-03 16:27:41 5222

转载 GCC中的堆栈保护技术

原文:GCC 中的编译器堆栈保护技术 CSAPP 第三章的练习3.38,是一个shellcode攻击的例子,下载范例bufbomb.c,编译、执行,运行时都弹出如下信息,始终无法成功执行溢出攻击。原来gcc4.1中默认开启了堆栈保护选项,使用-fno-stack-protector选项,成功堆栈......练习还没有做出来,网上没有gcc版的答案,等汇编能力加强,隔日再战。

2012-03-25 17:40:50 1719

转载 关于daemonize()

lock_kernel();siginitsetinv(¤t->blocked, SHUTDOWN_SIGS);daemonize();target_data.thread_id = current;unlock_kernel();注:SHUTDOWN_SIGS前面定义为# define SHUTDOWN_SIGS (sigmask(SIGKILL)|sigmask(SIGIN

2012-03-05 13:01:00 10539

原创 Linux下的微秒级定时器: usleep, nanosleep, select, pselect

今天在公司代码中看到了使用select函数的超时功能作定时器的用法,便整理了如下几个Linux下的微秒级别的定时器。在我的Ubutu10.10 双核环境中,编译通过。/* * @FileName: test_sleep.c * @Author: wzj * @Brief: * * * @History: * * @Date: 2012年02月07日星期二22:20:

2012-02-07 23:29:57 8712

原创 VI+Cscope+Ctags快速上手

在ubuntu下,直接sudo apt-get install cscope ctags。安装搞定。一、cscope使用:    1.在vi中用:    这个组合,用来看代码,代码索引目录自然少不了。使用cscope建立文件索引。      cscope -Rbkq        这个命令会生成三个文件:cscope.out, cscope.in.out, csco

2012-02-07 00:22:07 1209

转载 gethostbyname && struct hostent 示例

struct hostent *gethostbyname(const char *name);gethostbyname函数根据域名解析出服务器的ip地址,它返回一个结构体struct hostent:#include struct hostent { char *h_name; /* official name of host */

2012-01-31 13:06:05 2507

转载 Linux内核中的等待队列--init_waitqueue_head等

Linux内核中的等待队列    Linux内核的等待队列是以双循环链表为基础数据结构,与进程调度机制紧密结合,能够用于实现核心的异步事件通知机制。在Linux2.4.21中,等待队列在源代码树include/linux/wait.h中,这是一个通过list_head连接的典型双循环链表。    在这个链表中,有两种数据结构:等待队列头(wait_queue_head_t)和等待队

2012-01-30 23:41:19 769

转载 Linux中__init、__devinit等内核优化宏

内核使用了大量不同的宏来标记具有不同作用的函数和数据结构。如宏__init 、__devinit 等。这些宏在include/linux/init.h 头文件中定义。编译器通过这些宏可以把代码优化放到合适的内存位置,以减少内存占用和提高内核效率。下面是一些常用的宏:·   __init ,标记内核启动时使用的初始化代码,内核启动完成后不再需要。以此标记的代码位于.init.text 内存区

2012-01-02 17:09:43 2075

原创 Linux创建静态库

1、gcc -c joker.c mac.c创建.o文件,已编译,未链接的文件。2、ar crv libfoo.a joker.o mac.o对.o文件归档,把一组小的文件集中到一个大文件中,使用ar可以把任何类型的文件归为档案。3、ranlib libfoo.a为这个库创建一个内容表。可以这样引用: gcc -o program program.o libfoo.

2011-11-24 23:39:33 511

dot.exe

dot.exe

2013-06-03

double stack

double stack, to analys the strings and automachine.

2013-06-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除