linux下安装expect [转] 转载地址:http://blog.csdn.net/wind19/archive/2009/11/30/4905453.aspx我试验的环境是SuSe Linux 10.1expect的主页:http://expect.nist.gov/最新稳定版5.45.0的下载地址:http
dlopen dlsym dlclose解析 1. 打开动态链接库: #include void *dlopen(const char *filename, int flag); 该函数返回操作句柄,如: void *pHandle = dlopen(strSoFilePath, RTLD_LAZ
使用busybox定制自己的应用程序 使用busybox定制自己的应用程序1. Busybox配置首先在网上下载一个稳定的busybox版本,我用的版本是busybox-1.18.2,然后解压到工作目录。Busybox的配置方法和标准的linux内核的配置方法非常类似,我们只要切换到busybox的根目录下,使用make menuconfig命令就可以轻松定制出适合特定用途的一组应用程序。#make menuconfig#make#make install安装后,会发现busybox的bin目录下只有一个busybox
Busybox内置的tftpd, ftpd, telnetd, udhcpd, udhcpc配置 Busybox内置的tftpd, ftpd, telnetd, udhcpd, udhcpc配置Tftpd,ftpd可以由inetd来管理,telnetd理论上也可以由inetd来管理,但是目前开发板上我还没调通,只能telnetd独立运行。1. Tftpd配置步骤:#mkdir /tftp_ftp_dir //创建tftp server的根目录#vi /etc/inetd.conf //配置i
UNIX 高手的10 个习惯 采用 10 个能够提高您的 UNIX®命令行效率的好习惯——并在此过程中摆脱不良的使用模式。本文循序渐进地指导您学习几项用于命令行操作的技术,这些技术非常好,但是通常被忽略。了解常见错误和克服它们的方法,以便您能够确切了解为何值得采用这些 UNIX 习惯。 引言当您经常使用某个系统时,往往会陷入某种固定的使用模式。有时,您没有养成以尽可能最好的方式做事的习惯。有时,您的不良习惯甚至会导致出现混乱。纠正此类缺点的最佳方法之一,就是有意识地采用抵制这些坏习惯的好习惯。本文提出了 10 个值得采用的
用gdb跟踪函数栈桢的变化情况 代码如下:#include void hello(){ int i = 0; printf("i=%d, hello world/n", i);}int main(){ hello(); return 0;}gdb生成调试信息,进去看看。在hello处设置断点1,在main处设置断点2运行到断点2处,查看寄存器情况:Breakpoint 2, 0x080483f4 in main ()Missing sepa
linux下gdb单步调试(下)(转摘) 四、源代码的内存你可以使用 info line 命令来查看源代码在内存中的地址。 info line 后面可以跟 “ 行号 ” , “ 函数名 ” , “ 文件名 : 行号 ” , “ 文件名 : 函数名 ” ,这个命令会打印出所指定的源码在运行时的内存地址,如:(gdb) info line tst.c:funcLine 5 of "tst.c" starts at address 0x8048456 and ends at 0x804845d .还有一个命令( disass
linux下gdb单步调试(中)(转摘) 一、设置断点( BreakPoint )我们用 break 命令来设置断点。正面有几点设置断点的方法:break <function>在进入指定函数时停住。 C++ 中可以使用 class::function 或 function(type,type) 格式来指定函数名。break <linenum>在指定行号停住。break +offset
linux下gdb单步调试(上)转载 用 GDB 调试程序GDB 概述————GDB 是 GNU 开源组织发布的一个强大的 UNIX 下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像 VC 、 BCB 等 IDE 的调试,但如果你是在 UNIX 平台下做软件,你会发现 GDB 这个调试工具有比 VC 、 BCB 的图形化调试器更强大的功能。所谓 “ 寸有所长,尺有所短 ” 就是这个道理。一般来说, GDB 主要帮忙你
linux ln命令详解 ln是linux中一个非常重要命令。它的功能是为某一个文件在另外一个位置建立一个同步的链接,这个命令最常用的参数是-s,具体用法是: ln -s 源文件 目标文件 -s 是 symbolic的意思。 例:ln -s /lib/lsb /usr/lj即:在usr目录下建立指向/lib/lsb目录的lj文件。当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必
kmalloc, vmalloc分配的内存结构 kmalloc, vmalloc分配的内存结构对于提供了MMU(存储管理器,辅助操作系统进行内存管理,提供虚实地址转换等硬件支持)的处理器而言,Linux提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。 进程的4GB内存空间被人为的分为两个部分--用户空间与内核空间。用户空间地址分布从0到3GB(PAGE_OFFSET,在0x86中它等于0xC0000000),3GB到4GB为内核空间。 内核空间中,从3G到vmallo
Linux内核模块参数权限 在进行linux内核模块编程时,常常需要给模块传递参数,其作用是从使用的设备号到驱动应当任何操作的几个方面. 例如, SCSI 适配器的驱动常常有选项控制标记命令队列的使用,IDE 驱动允许用户控制 DMA 操作. 如果你的驱动控制老的硬件, 还需要被明确告知哪里去找硬件的 I/O 端口或者 I/O 内存地址.内核通过在加载驱动的模块时指定可变参数的值, 支持这些要求. 参数常常被声明为一个静态全局变量,如static int num=
__read_mostly变量 __read_mostly原语将定义为存放在.data.read_mostly段中 include/asm/cache.h#define __read_mostly __attribute__((__section__(".data.read_mostly"))) 由此可见,我们可以将经常需要被读取的数据定义为 __read_mostly类型, 这样Linux内核被加载时,该数据将自动被存放到Cache中,以提高整个系统的执行效率.
Linux中EXPORT_SYMBOL的用法 EXPORT_SYMBOL标签内定义的函数或者符号对全部内核代码公开,不用修改内核代码就可以在您的内核模块中直接调用,即使用EXPORT_SYMBOL可以将一个函数以符号的方式导出给其他模块使用。您还可以手工修改内核源代码来导出另外的函数,用于重新编译并加载新内核后的测试。Linux symbol export method:[1] If we want export the symbol in a module,
static变量 static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?答:全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局
一种C程序内存越界调试方法 偶然在ChinaUnix上看到一篇关于程序调试的帖子,里面讨论到了很多调试程序的方法,其中一个方法如下,觉得还不错: 如果别人的程序里malloc很多,不知道哪里有内存越界, 那就把malloc, free重新定义掉,放在一个头文件里,如mem.h 用gcc -include mem.h的方式重新编译代码,可以不修改别人的代码来检查内存问题。 (类似的,还要重定义strdup, realloc等函数)<
IP协议号 十进制 关键字 协议======= ======= ==============0 HOPOPT IPv6 逐跳选项 1 ICMP Internet 控制消息 2 IGMP Internet 组管理 3 GGP 网关对网关 4 IP IP 中的 IP(封装) 5 ST 流 6 TCP 传输控制 7 CBT CBT 8 EGP 外部网关协议
linux内核likely() 与 unlikely() 内核中的 likely() 与 unlikely()在 2.6 内核中,随处可以见到 likely() 和 unlikely() 的身影,那么为什么要用它们?它们之间有什么区别? 首先要明确: if(likely(value)) 等价于 if(value) if(unlikely(value)) 也等价于 if(value)也就是说 likely() 和 unlikely() 从阅
Linux TCP/IP协议栈笔记 路由缓存 转载:http://blog.163.com/s_xli1/blog/static/783579622008416091770/ 内核版本:2.6.12 1、什么是路由缓存当数据包进入网络层后,需要做的第一件事情,就是进行路由查找,也即根据数据包的目标地址,查找需要转发的目的网关,当然,实际情况比这个要复杂,查找条件并不仅限于目的地址。为了提高路由查找的效率,路由子系统引入了路由缓存的概
Linux 2.6内核中新的锁机制--RCU 本文详细地介绍了 Linux 2.6 内核中新的锁机制 RCU(Read-Copy Update) 的实现机制,使用要求与典型应用。一、 引言众所周知,为了保护共享数据,需要一些同步机制,如自旋锁(spinlock),读写锁(rwlock),它们使用起来非常简单,而且是一种很有效的同步机制,在UNIX系统和Linux系统中得到了广泛的使用。但是随着计算机硬件的快速发展,获得这种锁的开销相对于CPU的速度在成倍地增加,原因很简单,CPU的速度与访问内存的速度