- 博客(109)
- 收藏
- 关注
转载 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
2011-07-20 11:29:29
1865
转载 dlopen dlsym dlclose解析
1. 打开动态链接库: #include void *dlopen(const char *filename, int flag); 该函数返回操作句柄,如: void *pHandle = dlopen(strSoFilePath, RTLD_LAZ
2011-07-12 09:31:19
983
原创 使用busybox定制自己的应用程序
使用busybox定制自己的应用程序1. Busybox配置首先在网上下载一个稳定的busybox版本,我用的版本是busybox-1.18.2,然后解压到工作目录。Busybox的配置方法和标准的linux内核的配置方法非常类似,我们只要切换到busybox的根目录下,使用make menuconfig命令就可以轻松定制出适合特定用途的一组应用程序。#make menuconfig#make#make install安装后,会发现busybox的bin目录下只有一个busybox
2011-04-06 19:02:00
2521
原创 Busybox内置的tftpd, ftpd, telnetd, udhcpd, udhcpc配置
<br />Busybox内置的tftpd, ftpd, telnetd, udhcpd, udhcpc配置<br /><br />Tftpd,ftpd可以由inetd来管理,telnetd理论上也可以由inetd来管理,但是目前开发板上我还没调通,只能telnetd独立运行。<br />1. Tftpd<br />配置步骤:<br />#mkdir /tftp_ftp_dir //创建tftp server的根目录<br />#vi /etc/inetd.conf //配置i
2011-03-11 19:03:00
11377
转载 UNIX 高手的10 个习惯
采用 10 个能够提高您的 UNIX®命令行效率的好习惯——并在此过程中摆脱不良的使用模式。本文循序渐进地指导您学习几项用于命令行操作的技术,这些技术非常好,但是通常被忽略。了解常见错误和克服它们的方法,以便您能够确切了解为何值得采用这些 UNIX 习惯。 引言当您经常使用某个系统时,往往会陷入某种固定的使用模式。有时,您没有养成以尽可能最好的方式做事的习惯。有时,您的不良习惯甚至会导致出现混乱。纠正此类缺点的最佳方法之一,就是有意识地采用抵制这些坏习惯的好习惯。本文提出了 10 个值得采用的
2010-10-13 14:30:00
612
转载 用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
2010-10-13 11:01:00
758
转载 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
2010-10-08 17:22:00
597
转载 linux下gdb单步调试(中)(转摘)
<br />一、设置断点( BreakPoint )<br /><br />我们用 break 命令来设置断点。正面有几点设置断点的方法:<br /><br />break <function><br />在进入指定函数时停住。 C++ 中可以使用 class::function 或 function(type,type) 格式来指定函数名。<br /><br />break <linenum><br />在指定行号停住。<br /><br />break +offset<br />
2010-10-08 17:14:00
839
转载 linux下gdb单步调试(上)转载
<br />用 GDB 调试程序<br /><br />GDB 概述<br />————<br /><br />GDB 是 GNU 开源组织发布的一个强大的 UNIX 下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像 VC 、 BCB 等 IDE 的调试,但如果你是在 UNIX 平台下做软件,你会发现 GDB 这个调试工具有比 VC 、 BCB 的图形化调试器更强大的功能。所谓 “ 寸有所长,尺有所短 ” 就是这个道理。<br /><br />一般来说, GDB 主要帮忙你
2010-10-08 17:12:00
482
转载 linux ln命令详解
<br />ln是linux中一个非常重要命令。它的功能是为某一个文件在另外一个位置建立一个同步的链接,这个命令最常用的参数是-s,具体用法是: <br /><br />ln -s 源文件 目标文件 -s 是 symbolic的意思。 <br />例:ln -s /lib/lsb /usr/lj<br />即:在usr目录下建立指向/lib/lsb目录的lj文件。<br /><br />当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必
2010-09-27 09:16:00
584
转载 kmalloc, vmalloc分配的内存结构
<br />kmalloc, vmalloc分配的内存结构<br /><br />对于提供了MMU(存储管理器,辅助操作系统进行内存管理,提供虚实地址转换等硬件支持)的处理器而言,Linux提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。<br /> 进程的4GB内存空间被人为的分为两个部分--用户空间与内核空间。用户空间地址分布从0到3GB(PAGE_OFFSET,在0x86中它等于0xC0000000),3GB到4GB为内核空间。<br /> 内核空间中,从3G到vmallo
2010-09-13 11:36:00
509
转载 Linux内核模块参数权限
<br />在进行linux内核模块编程时,常常需要给模块传递参数,其作用是从使用的设备号到驱动应当任何操作的几个方面. 例如, SCSI 适配器的驱动常常有选项控制标记命令队列的使用,<br />IDE 驱动允许用户控制 DMA 操作. 如果你的驱动控制老的硬件, 还需要被明确告知哪里去找硬件的 I/O 端口或者 I/O 内存地址.<br />内核通过在加载驱动的模块时指定可变参数的值, 支持这些要求.<br /> 参数常常被声明为一个静态全局变量,如static int num=
2010-09-09 14:38:00
961
转载 __read_mostly变量
<br />__read_mostly原语将定义为存放在.data.read_mostly段中<br /> include/asm/cache.h<br />#define __read_mostly __attribute__((__section__(".data.read_mostly")))<br /><br /> 由此可见,我们可以将经常需要被读取的数据定义为 __read_mostly类型, 这样Linux内核被加载时,该数据将自动被存放到Cache中,以提高整个系统的执行效率.<br
2010-08-30 18:19:00
5432
转载 Linux中EXPORT_SYMBOL的用法
<br />EXPORT_SYMBOL标签内定义的函数或者符号对全部内核代码公开,不用修改内核代码就可以在您的内核模块中直接调用,即使用EXPORT_SYMBOL可以将一个函数以符号的方式导出给其他模块使用。<br />您还可以手工修改内核源代码来导出另外的函数,用于重新编译并加载新内核后的测试。<br /><br /><br />Linux symbol export method:<br /><br />[1] If we want export the symbol in a module,
2010-08-30 17:11:00
4849
转载 static变量
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?答:全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局
2010-08-13 12:31:00
340
转载 一种C程序内存越界调试方法
<br />偶然在ChinaUnix上看到一篇关于程序调试的帖子,里面讨论到了很多调试程序的方法,其中一个方法如下,觉得还不错:<br /> <br /> 如果别人的程序里malloc很多,不知道哪里有内存越界,<br /> 那就把malloc, free重新定义掉,放在一个头文件里,如mem.h<br /> 用gcc -include mem.h的方式重新编译代码,可以不修改别人的代码来检查内存问题。<br /> (类似的,还要重定义strdup, realloc等函数)<
2010-08-11 19:18:00
866
转载 IP协议号
十进制 关键字 协议<br />======= ======= ==============<br />0 HOPOPT IPv6 逐跳选项 <br />1 ICMP Internet 控制消息 <br />2 IGMP Internet 组管理 <br />3 GGP 网关对网关 <br />4 IP IP 中的 IP(封装) <br />5 ST 流 <br />6 TCP 传输控制 <br />7 CBT CBT <br />8 EGP 外部网关协议 <br /
2010-08-04 09:46:00
660
转载 linux内核likely() 与 unlikely()
<br />内核中的 likely() 与 unlikely()<br />在 2.6 内核中,随处可以见到 likely() 和 unlikely() 的身影,那么为什么要用它们?它们之间有什么区别? <br />首先要明确:<br /> if(likely(value)) 等价于 if(value)<br /> if(unlikely(value)) 也等价于 if(value)<br />也就是说 likely() 和 unlikely() 从阅
2010-08-01 13:16:00
493
转载 Linux TCP/IP协议栈笔记 路由缓存
<br />转载:http://blog.163.com/s_xli1/blog/static/783579622008416091770/<br /> <br />内核版本:2.6.12<br /> <br /> <br />1、什么是路由缓存<br />当数据包进入网络层后,需要做的第一件事情,就是进行路由查找,也即根据数据包的目标地址,查找需要转发的目的网关,当然,实际情况比这个要复杂,查找条件并不仅限于目的地址。<br /><br />为了提高路由查找的效率,路由子系统引入了路由缓存的概
2010-07-28 21:47:00
1565
转载 Linux 2.6内核中新的锁机制--RCU
<br />本文详细地介绍了 Linux 2.6 内核中新的锁机制 RCU(Read-Copy Update) 的实现机制,使用要求与典型应用。<br />一、 引言<br />众所周知,为了保护共享数据,需要一些同步机制,如自旋锁(spinlock),读写锁(rwlock),它们使用起来非常简单,而且是一种很有效的同步机制,在UNIX系统和Linux系统中得到了广泛的使用。但是随着计算机硬件的快速发展,获得这种锁的开销相对于CPU的速度在成倍地增加,原因很简单,CPU的速度与访问内存的速度
2010-07-28 21:43:00
377
转载 原子操作atomic_t
原子操作 所谓原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它的最小的执行单位,不可能有比它更小的执行单位,因此这里的原子实际是使用了物理学里的物质微粒的概念。 原子操作需要硬件的支持,因此是架构相关的,其API和原子类型的定义都定义在内核源码树的include/asm/atomic.h文件中,它们都使用汇编语言实现,因为C语言并不能实现这样的操作。 原子操作主要用于实现资源计数,很多引用计数(refcnt)就是通过原子操作实现的。原子类型定义如下:typedef struc
2010-07-27 10:10:00
1406
转载 linux内核中的Hlist与List_head结构
List_Head操作系统内核经常需要维护数据结构。内核有标准的循环链表、双向链表的实现。在文件中定义了一个list_head类型简单结构: struct list_head { struct list_head *next, *prev; }; 通用链表的常用用途是将某一
2010-05-12 18:19:00
485
转载 Linux下如何查看CPU信息, 包括位数和多核信息
Linux下如何查看CPU信息, 包括位数和多核信息# uname -aLinux euis1 2.6.9-55.ELsmp #1 SMP Fri Apr 20 17:03:35 EDT 2007 i686 i686 i386 GNU/Linux(查看当前操作系统内核信息)# cat /etc/issue | grep LinuxRed
2010-03-26 09:46:00
791
原创 Access、Hybrid和Trunk三种模式的理解
<!-- /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-a
2009-12-07 21:48:00
11094
2
原创 排序算法总结
1.插入排序一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:从第一个元素开始,该元素可以认为已经被排序取出下一个元素,在已经排序的元素序列中从后向前扫描如果该元素(已排序)大于新元素,将该元素移到下一位置重复步骤3,直到找到已排序的元素小于或者等于新元素的位置将新元素插入到该位置中重复步骤2如果比较操作的代价比交换操作
2009-09-27 14:35:00
845
转载 使用rsync命令同步数据
考虑到服务器数据的安全,我考虑增加一台备份服务器,通过数据同步,达到较好的冗余。 linux下有非常好的一个命令rsync可以实现差异备份,下面就说说它的用法:▲合适系统:红旗DC 4.1 or 5.0或其他linux、FreeBSD系统▲测试环境:红旗DC 5.0一、通过rsh或ssh命令 在没有建立rsync服务器的情况下,我们可以利用rsync命令直接进
2009-09-24 15:19:00
363
转载 RIP源码分析
转载地址:http://blog.chinaunix.net/u3/94761/showart_1905542.html Int main (int argc, char **argv){ char *p; int daemon_mode = 0; char *progname; struct
2009-08-11 11:19:00
1515
转载 quagga安装和使用
测试环境-Fedora7.01. 下载源码quagga-0.99.10.tar.gz 2. 解压缩 tar xzvf quagga-0.99.10.tar.gz3. 配置cd quagga-0.99.10 ./configure --prefix =/usr --sysconfdir=/etc/
2009-08-10 09:57:00
6090
转载 华为技术篇之OSPF协议入门
1.1. OSPF入门童话 可以把整个网络(一个自治系统AS)看成一个王国,这个王国可以分成b几个区(area),现在我们来看看区域内的某一个人(你所在的机器root)是怎样得到一张世界地图(routing table)的。 首先,你得跟你周围的人(同一网段如129.102)建立基本联系。你大叫一声“我在这!”(发HELLO报文),于是,周围的人知道你的存在,他
2009-08-04 15:23:00
649
原创 在二元树中找出和为某一值的所有路径
Normal 0 7.8 pt 0 2 false false false MicrosoftInternetExplorer4 <!-- /* Sty
2009-07-30 14:49:00
418
原创 查找链表中倒数第k个结点
题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。分析:为了得到倒数第k个结点,很自然的想法是先走到链表的尾端,再从尾端回溯k步。可是输入的是单向链表,只有从前往后的指针而没有从后往前的指针。因此我们需要打开我们的思路。既然不能从尾结点开始遍历这个链表,我们还是把思路回到头结点上来。假设整个链表有n个
2009-07-21 10:43:00
2661
转载 big endian & little endian(大端字节序和小端字节序)
假设:a=0x12345678;则大端字节序和小端字节序的存储如下图所示: Big-Endian Little-Endian0字节 12h 78h1字节 3
2009-07-06 17:20:00
384
转载 Linux系统下ifconfig命令使用及结果分析
Linux下网卡命名规律:eth0,eth1。第一块,第二块以太网卡。lo为环回接口,它的IP地址固定为127.0.0.1,掩码8位。它代表你的机器本身。 1、ifconfig是查看网卡的信息。 ifconfig [Interface] Interface是可选项,如果不加此项,则显示系统中所有网卡的信息。如果添加此选项则显示所指定的网卡信
2009-06-09 11:08:00
375
转载 链表API之应用
如前文所述,Linux内核中的代码,经过稍加改造后,可以在用户态下使用。 linclude/linux/list.h 中的函数和宏,是一组精心设计的API,有比较完整的注释和清晰的思路。在用户态下使用list.h,查看改造后的list.h1. 举例 下面是用户态下的例子,用以创建、增加、删除和遍历一个双向链表。#include #include #inclu
2009-05-08 15:43:00
427
转载 深入分析 Linux 内核链表
抽象是软件设计中一项基本技术,如上所述,在众多数据结构中,选取双向链表作为基本数据结构,这就是一种提取和抽象。1. 简约而又不简单的链表定义于双向链表而言,内核中定义了如下简单结构: struct list_head { struct list_head *next, *prev; };
2009-05-08 15:38:00
329
转载 IPTABLES中SNAT和MASQUERADE的区别
IPtables中可以灵活的做各种网络地址转换(NAT)网络地址转换主要有两种:SNAT和DNAT SNAT是source network address translation的缩写即源地址目标转换比如,多个PC机使用ADSL路由器共享上网每个PC机都配置了内网IPPC机访问外部网络的时候,路由器将数据包的报头中的源地址替换成路由器的ip当外部网络的服务器比如网站web服务器接到访问
2009-04-30 11:16:00
715
转载 套接字选项setsockopt()
套接字选项这个话题在socket编程里,可能已经属于中高级话题了,之所以在一开始就把这个话题提上来讲,是因为我们的一个近阶段目标是能够把MY_PF_INET域的RAW协议走通,并在上面跑起一个ping程序,所以,按照ping程序的要求,接下来,我们必须实现套接字选项系统调用setsockopt在MY_PF_INET中RAW协议中的相关实现。 下面是该系统调用函数的原型:
2009-04-22 13:30:00
1537
转载 linux socket 绑定机制的研究
http://blog.csdn.net/rstevens/archive/2006/05/08/713219.aspx1. 概述:在多 link 环境中,如何保证数据在正确的 link 上传输是一个棘手的问题。 本文主要分析 linux socket 绑定机制的实现,从而帮助开发人员更好的了解 socket 绑定的本质。2. linux kernel 提供给 user
2009-04-22 12:23:00
939
转载 connect函数
对于客户机而言,要与服务器进行通信,需要向服务器发出连接请求。connect函数用于完成这项功能,该函数的具体信息如表13.7所示。表13.7 connect函数头文件函数形式int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrle
2009-04-21 15:16:00
3576
1
转载 select系统调用实例
Select 系统调用:select系统调用是用来监视多个文件句柄的状态的。程序会停在select这里等待,直到被监视的文件句柄有某一个或多个发生了状态改变,或者到了超时时间。 具体的select系统调用的参数可以看看man手册里面的说明,这里我们用一个用户空间的事例来解释说明一下这个系统调用的用法:int main(void){ int fd1,f
2009-04-20 10:53:00
617
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人