- 博客(47)
- 资源 (34)
- 收藏
- 关注
原创 内核驱动单独编译(如mdraid)而不依赖编译内核
在学习使用内核中的驱动模块时,可能需要修改一些源代码,跟踪调试等,这就需要重新编译该模块,一种方式是直接重新编译内核,但是这样耗时较多,而且每次修改的时候都需要这样做就太麻烦了。所以这里介绍另一中方式,不用重新编译内核,只用修改该驱动模块的Makefile,使得该驱动模块能够不依赖编译内核而单独编译,下面以软raid模块为例来进行说明。 首先需要确保当前内核版本与系统中的linux-he
2014-01-13 19:10:29
4223
原创 ubuntu编译内核
1.先下载需要编译的内核版本的源代码并解压(以linux-3.2.39为例);2.进入内核源码目录,把系统中原来的config配置拷贝到源码目录下,这样做是为了重新编译内核时仍然能够把原有系统中的驱动等编译进去;#~/linux-3.2.39# cp /boot/config-3.2.39 .config3.然后使用make menuconfig再选择需要编译的选项;#~/linu
2014-01-13 18:51:57
913
原创 出现connection9060:0: detected conn error信息时的问题定位分析
在使用iscsi设备时(open-iscsi+iscsitarget),在kern.log内核日志中发现了大量的conn error信息:Jan 13 10:20:47 localhost kernel: [11724968.627194] connection9060:0: detected conn error (1020)Jan 13 10:20:50 localhost kerne
2014-01-13 18:42:57
5953
原创 文档利器reStructuredText
关于为啥要用reStructuredText,这个不用多说,方便,简洁。单从Python和Django的官网文档就是用reStructuredText来编写的,就可以看出这是一把利器。reStructuredText(简写rst)能够转换的格式很多,包括html、xml、pdf及Latex等。一开始在windows下使用rst来编写,采用vim编辑器,可以装一个rst的插件vst.vim,
2013-06-04 20:27:29
6673
原创 Eclipse+Maven+Mybatis使用
在eclipse上使用maven,需要先安装插件m2e。安装好后,就可以新建一个maven工程,建好之后如下:为了解决依赖问题,需要在pom.xml中加入mybatis和mysql的依赖。这样在Maven Dependencies下面就可以看到依赖包。下面开始mybatis的使用,参考《Mybatis3用户指南中文版》。首先在src/
2013-06-02 15:43:53
2227
原创 服务端 write时,收到RST响应(对端socket中断),导致服务器进程关闭
客户端申请下载文件,在下载过程中时,客户端终止程序(ctrl+c),服务器接着发送数据,根据TCP协议的规定,会收到一个RST的响应,服务端再往这个socket写数据时,系统会发出一个SIGPIPE信号给进程,通知进程这个连接已经断开,根据信号的默认处理规则SIGPIPE信号的默认执行动作是终止、退出,所以服务器会退出,因此会出现服务器在未提示错误的情况下进程就退出了。为了不让服务器退出,可以把S
2012-09-07 12:39:47
2274
原创 linux获取目录下文件大小的问题
代码如下:void list_dir(char *path){DIR *dir;struct dirent *entry;struct stat stat_buf;if ((dir = opendir(path)) == NULL){printf("cannot open dir:%s\n", path);return;}while ((entry =
2012-09-02 17:16:56
2618
原创 基于原始套接字(raw socket)的网络抓包工具
基于raw socket的网络抓包工具1. 原始套接字(raw socket)简介原始套接字可以接收本机网卡上的数据帧或者数据包,利用raw socket可以编写基于IP协议的程序。一般的TCP/UDP类型的套接字只能够访问传输层以及传输层以上的数据,而原始套接字却可以访问传输层一下的数据,所以使用raw socket既可以实现应用层的数据操作,也可以实现链路层的数据操作。1.1 基本
2012-08-30 11:47:32
13358
原创 C/C++数组的大小最大能有多大?
直接定义一个数组,如a[SIZE];这个是分配的静态空间,在栈上(局部变量)或全局静态区(全局变量)上分配的,一般栈的内存是1M到2M,所以静态分配的空间不能太大,比如如果定义a[1024*1024];运行时就会报”段错误“,遇到要申请大的空间时,就需要动态申请。
2012-08-10 10:00:34
8940
1
原创 基于libcap的网络包分析问题集锦续(http post方式上传文件)
8. 批量上传时,是有多个post包还是只用一个post?答:如果批量上传是以多个表单的方式,如下这种方式批量上传,通过firefox的Httpfox抓包可以看到只有一次POST,每一个文件所处不同的表单,信息在包中用boundary分隔,如问题2中所述。如果是按以下方式上传,就是一个文件打开框里可以选多个文件。这样上传方式,监听到每一个文件对应一个POST,那每一
2012-08-09 16:28:34
1555
原创 基于libcap的网络包分析问题集锦(http post方式上传文件)
1. 关于http post方式中boudaryContent-type一行中有boundary关键字,=号后面就是boundary的值,如boundary=---------------------------16541483331115---------------------------16541483331115是分隔符,分隔多个文件、表单项。其 中16541483331115
2012-08-06 16:06:38
1993
原创 libcap使用小结
1. 安装下载http://www.tcpdump.org/#old-releases ,我下的libpcap-1.0.0.tar.gz#tar -zxvf libpcap-1.0.0.tar.gz#cd libpcap-1.0.0#./configure#make;make install安装到默认的目录/usr/lib/和/usr/include/2. 使用使用
2012-08-03 17:07:21
5460
原创 tcpdump使用小结
Tcpdump的常用选项-a 尝试将网络和广播地址转换成名称。-c数据包数目> 收到指定的数据包数目後,就停止进行倾倒操作。-d 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出。-dd 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出。-ddd 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出。-e 在每列倾倒资料上显示连接层级的文件头。-
2012-08-03 17:06:24
3547
原创 基于IPC的echo server
Linux下使用共享内存和信号量来实现一个echo server。对共享内存的操作使用信号量来控制,类似于生产者和消费者的问题。下面附上server端和client端的代码。Server.c#include #include #include #include #include #include #include #include #include #i
2012-08-03 17:05:13
927
原创 c语言mysql编程杂记
1. MakefileINCLUDE=/usr/include/mysql/LIBS=/usr/lib/mysqlall: gcc -I$(INCLUDE) -L$(LIBS) -lmysqlclient xxx.c -o xxxclean: rm -f xxx2. mysql的头文件和库文件配置如果mysql是默认安装的,在Make
2012-07-27 12:27:42
1437
原创 C mysql编译链接问题
首先在源代码里面包含头文件mysql.h#include "/usr/include/mysql/mysql.h" 这样可以不用在编译选项中加-I/usr/include/mysql/直接#include "mysql.h",然后在编译选项中加入-I/usr/include/mysql/编译选项:#gcc -I/usr/include/mysql/ -L/usr/lib/mys
2012-07-20 10:05:03
1020
原创 cgi开发遇到的问题续
1. fopen打开文件的问题Fopen以写方式打开文件时,如果只是文件名(默认当前目录),则可以打开成功;如果指定一个相对路径,如/usr/local/apache/cgi-bin/upload/filename,则打开失败。出现这个问题的原因是因为权限不够(cgi程序运行时,是apache的用户,权限有限),虽然给cgi-bin更改了权限(chmod o+w /usr/local/apac
2012-07-13 14:11:02
2336
原创 cgi开发遇到的问题
使用xxx代码在linux上编译运行,访问xxx.html时,上传文件出现错误500 Server Internal Error,查看apache错误日志error.log看到错误:Premature end of script headers网上搜索这个错误,发现一般是文件权限问题,于是配置httpd.conf的文件权限确保allow在deny前,allow from all
2012-07-12 09:13:54
941
原创 c语言开发cgi学习笔记
初学cgi,实现一个简单的网页,能够完成上传、下载、删除、浏览目录的功能。工欲善其事必先利其器,首先要了解一下http协议,HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616。写cgi程序往往需要分析网络包,为此介绍一利器:httpwatch,这个是ie的一个插件,只需要选择相应的
2012-07-12 09:12:13
1304
原创 apache在SUSE linux下的源码安装配置(httpd-2.2.22)
1. 下载httpd:http://labs.renren.com/apache-mirror/httpd/,下载了httpd-2.4.2.tar.gz2. 安装apache#tar zxvf httpd-2.4.2.tar.gz#cd httpd-2.4.2#./configure --prefix=/usr/local/apache --enable-modules=most
2012-07-09 19:34:58
5297
原创 windows远程桌面连接fedora14
xp或者win7要远程桌面连接fedora14,只需要在fedora14里安装xrdp就可以了。通过yum安装:yum install xrdp然后开启服务 /etc/init.d/xrdp start即可远程连接然后将该服务加入开机启动项就可以了。
2011-12-19 21:26:44
1351
原创 堆与栈存储效率的一点理解
http://wenku.baidu.com/view/e180b4df5022aaea998f0f36.html这篇文章上关于堆和栈的区别加以阐述,其中提到的堆与栈的存储效率的地方,通过自己查看汇编代码,把自己的理解汇总如下,算是对以上这篇文章的补充:还是引用这个经典的例子:#include void main() { char a = 1; char c[] = "
2011-11-01 15:45:48
1119
转载 SSH Telnet 终端退出后保持程序继续运行
http://blog.zhangjianfeng.com/article/718 你是不是经常需要 SSH 或者 telent 远程登录到 Linux 服务器?你是不是经常为一些长时间运行的任务而头疼,比如系统备份、ftp 传输等等。通常情况下我们都是为每一个这样的
2011-10-11 16:42:46
1620
原创 双向LRU链表
LRU是最近最少使用算法。一般内存管理的时候采用LRU算法可以提高性能。将cache缓存块位置用LRU双向链表链接起来,将新加入的块直接放到链表的头,当一个块被命中后,把该块调整到链表的头,这样经过多次操作之后,最近被命中过的块就会向链表头部移动,而没有被命中
2011-07-04 10:21:32
2960
原创 mmap映射空间与内存和磁盘的IO性能对比
mmap:功能描述:mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。munmap执行相反的操作,删除特定地址区域的对象映射。 基于文件的映射,在mmap和munmap执行过程的任何时刻,被映射文件的st_atime可能被更新。如果st_atime字段在前述的情况下没有得到更新,首次对映射区的第一个页索引时会更
2011-06-29 20:36:00
7988
原创 page_cache和buffer_cache的直观理解
在这篇博客上http://blog.youkuaiyun.com/cheungjustin/archive/2010/08/31/5853399.aspx看到关于page cache,buffer cache的解释。 针对博客里面一开始提出的问题:一个程序,需要读入文件,它第一次执行时间和第二次执行时间一样吗?将文件改名后呢,umount文件系统后再mount上呢? 这篇
2011-06-29 20:32:00
1168
原创 linux内核bug调试指南(一)
<br />1. do_sync_write/do_sync_read读写错误,返回值ret=-22;<br />通过查对应内核源代码中errno-bash.h,可以知道-22表示Invalid argument<br />函数调用的形式如下:<br />#define WRITE_STRIPE_SIZE (128*1024)<br />loff_t pos;<br />mm_segment_t oldfs;<br />int offset;<br />offset = 17000;<br />p
2011-05-30 20:32:00
1918
原创 kvm测试环境搭建(包括kvm网络桥接配置)
<br />kvm测试环境搭建<br />1. 操作系统:ubuntu 9.10 64bit <br />2. Kernel module:<br />下载kvm-kmod-2.6.32.16然后编译;<br />sudo insmod /root/kvm-kmod-2.6.32.16/x86/kvm.ko<br />sudo insmod /root/kvm-kmod-2.6.32.16/x86/kvm-intel.ko<br />3. Kvm依赖文件包:<br />gcc
2011-05-13 10:40:00
4804
原创 数组分割问题(另一种说法是交换两个数组元素使两个数组和的差最小)
<br />一、数组分割问题:(原帖见http://www.cppblog.com/baby-fly/archive/2009/09/24/92392.html)<br />题目概述:有一个没有排序,元素个数为2N的正整数数组。要求把它分割为元素个数为N的两个数组,并使两个子数组的和最接近。<br />假设数组A[1..2N]所有元素的和是SUM。模仿动态规划解0-1背包问题的策略,令S(k, i)表示前k个元素中任意i个元素的和的集合。显然:<br />S(k, 1) = {A[i] | 1<= i <=
2011-05-13 09:23:00
4402
原创 获取linux下scsi号的脚本
<br />在linux下可以通过cat /proc/scsi/scsi获取有关scsi的信息,如下:<br />Attached devices:<br />Host: scsi0 Channel: 00 Id: 00 Lun: 00<br /> Vendor: ATA Model: ST3160023AS Rev: 3.18<br /> Type: Direct-Access ANSI SCSI revision: 05<br />Ho
2011-05-12 19:46:00
1787
原创 tpc-c测试环境搭建
<br />搭建TPC-C环境<br />一、 准备<br />操作系统 :Linux, 内核版本2.6<br />需要软件:tpccuva-1.2.3, postgresql-8.1.15, gnuplot-4.2.5。<br />tccuva是实现标准TPC-C。<br />Postgresql是最稳定的开源sql数据库。<br />gunplot是一个数学软件,可以根据数据画出相应的函数图形。<br /> <br />二、 安装<br />1. 创建用户<br />useraddnew
2011-05-12 19:37:00
4069
原创 linux下iscsi连接脚本
<br />客户端通过iscsi连接服务器首先要保证客户端上安装了iscsi-initiator-utils,可以根据客户端的内核版本找对应的iscsi-initiator版本,安装好之后通过以下脚本(iscsi)操作如下命令:./iscsi start xxx.xxx.xxx.xxx(服务器ip)就可以连接服务器了。<br />#!/bin/bash<br />ipAddr=$2<br />DRIVERDIR=/lib/modules/$(uname -r)/kernel/drivers/scsi<br
2011-05-12 19:32:00
1448
原创 trace测试环境搭建
<br /><br />Trace测试环境搭建:<br />用trace测的时候需要装blktrace和libaio;这两个包在47和48上都有,拷贝到需要安装的机器上,然后进入相应目录make;make install 即可。<br />在49上有测试的trace,//192.168.0.49/data/spc下面有几个trace。拷贝到相应机器上之后进入如<br />[root@test4 ~]# cd /data/spc/f1/<br />[root@test4 f1]# ls<br />btrepl
2011-05-11 14:46:00
1599
原创 sysbench测试环境搭建
1. 安装mysql方法一:默认安装(这里使用的是这种方法)<br />1.安装<br />Fedora 8中安装Mysql 5数据库其实很简单,Linux安装的比在Windows下还好使!<br />yum install mysql-server<br />yum install mysql<br />mysql_install_db<br />好了,比以前的版本轻松许多。<br />另外mysql server的日志文件为/var/log/mysqld.log<br /> <br />一個是
2011-05-11 14:39:00
1425
转载 解惑-Linux内核空间
<br />解惑-Linux内核空间<br />解惑-Linux内核空间(一)<br />有这么一系列的问题,是否在困扰着你:用户程序编译连接形成的地址空间在什么范围内?内核编译后地址空间在什么范围内?要对外设进行访问,I/O的地址空间又是什么样的?<br />先回答第一个问题。Linux最常见的可执行文件格式为elf(Executable and Linkable Format)。在elf格式的可执行代码中,ld总是从0x8000000开始安排程序的“代码段”,对每个程序都是这样。至于程序执行时在物理内存
2011-02-20 10:01:00
1462
原创 vmware串口调试
在调试内核态程序时,发现内核里面的打印信息在默认的情况下只能在控制台输出,由于控制台能看到得信息有限,这就导致不能看到很多有用的调试信息。经过试验,可以有两种办法解决这个问题。1.使用串口调试。把调试信息通过串口输出,然后再用别的自己觉得好用程序读出打印信息。具体步骤如下 (1)在vmare中增加一个串口。在虚拟机的.vmx文件中加入以下信息 serial0.present = "TRUE" serial0.autodetect = "TRUE" se
2011-02-20 09:57:00
1509
转载 转:vs2005无法调试,没有生成pdb文件的解决办法
其实问题在于,在空项目中不生成调试文件pdb,所以无法调试。要让项目生成pdb文件,需要更改:项目属性,configuration properties->linker->Generate Debug Info 从 no 改为 yes(项目属性:属性->连接器->调试->生成连接信息 改为"是")但这样还是不够的,还需要更改:项目属性,configuration proper
2009-07-20 20:34:00
6295
转载 转:IPv6下网络编程步骤(linux)
大家都知道,随着互联网上主机数量的增多,现有的32位IP地址已经不够用了,所以推出了下一代IP地址IPv6,写网络程序的要稍微改变一下现有的网络程序适应IPv6网络是相当容易的事。对于我们来说就是IP地址变化了,所以程序里在用到IP地址的地方做相应的改变就可以了。记住:主要是改变程序里设置IP地址和端口等部分的代码。服务器端源代码如下: #include #include #inc
2009-07-20 20:21:00
1073
转载 转:BT协议分析
一 BT系统的组成结构 1 普通的Web服务器: 例如Apache或IIS服务器2 一个静态的种子文件: 即.Torrent文件,采用Bencoding编码3 Tracker服务器: 追踪下载同一文件的用户4 终端用户的Web浏览器:用于下载种子文件5 BT客户端: 例如BitCommet,BitSpirit 二 种子文
2009-07-16 08:15:00
1281
转载 转 eMule源代码解析(五)
转 eMule源代码解析(五)emule中的Kademlia代码总体描述当emule中开始使用Kademlia网络后,便不再会有中心服务器失效这样的问题了,因为在这个网络中,没有中心服务器,或者说,所有的用户都是服务器,所有的用户也是客户端,从而完完全全得实现了P2P。接下来讲针对emule中的Kademlia网络进行分析,会有一节进行原理方面的分析。另外的几节将会根据
2009-07-12 12:06:00
1395
mfc中CTreeCtrl使用的一个例子
2009-08-11
ListControl控件的使用方法实例
2009-08-11
mfc在对话框中加入属性页五种方案源码
2009-08-11
《Visual C++.NET技术内幕》(英文)第六版
2009-08-06
VC++技术内幕第四版源码
2009-08-06
Linux程序设计(Beginning.Linux.Programming)第4版
2009-07-30
深入浅出mfc简体版源码
2009-07-29
enhanced-ctorrent移植到windows下的编译连接错误及解决办法
2009-07-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人