本文介绍一对比较简单实用的Bftpd和Cmdftp的FTP服务对编译配置过程。 Bftpd是一款FTP服务器,其可以广泛应用于Linux、BSD/OS、FreeBSD、Solaris、DG-UX以及Tru64平台。Bftpd主旨成为一款高速、小巧而且配置方便的服务器,我们可以使用其默认的配置选项,也可以通过交叉编译将其嵌入在我们不同的应用平台上。 Cmdftp是一款FTP客户端。它采用命令行方式、被动模式、支持断点续连、自动登陆、以及大型文件传输。Cmdftp的指令集还是比较完善的,除了基本的上传和下载功能之外,还支持复制、移动、批量文件上传下载、允许远程以及本地的文件浏览和修改等功能。另外,它还可以用"Tab"键去自动搜索匹配远程以及本地的文件名,更方便用户操作。详细的命令行信息可以在登陆后键入-h来获得。Cmdftp的登陆方式也很简单,在安装路径下,直接键入cmdftp后加上server端的IP地址即可匿名访问。 下载 从http://down.chinaz.com/soft/31672.htm和http://down.chinaz.com/soft/31673.htm下载得到bftpd-3.7.tar.gz和cmdftp-0.9.7.tar.gz。 编译 源码的编译过程均比较简单,我结合我们自己的平台系统来简单阐述一下交叉编译的过程。 tar zxvf bftpd-3.7.tar.gz //下载源码名 cd bftpd-3.7 //进入源码路径 CC= arm-linux-gcc ./configure –host=arm-linux //设置交叉编译环境 make //编译 安装 由于我们需要安装到自己的嵌入式平台下面,所以需要手动将相关文件拷贝到我们裁减过的嵌入式内核的相关目录中去。 1)bftpd: 需要将bftpd.conf以及ftpdpassword文件拷贝到裁减内核的etc路径下;需要将bftpd拷贝到裁减内核的usr/sbin路径下。 2)cmdftp: 需要将cmdftp拷贝到裁减内核的usr/sbin路径下。 运行 对于bftpd,当然你可以使用inetd、xinetd或者standalone模式来启动,对于前两种模式,只需要修改相关的inetd.conf以及xinetd.conf(均在etc路径下)文件即可。如果采用standalone模式,可以在安装路径下键入./bftpd –d即启动。 对于cmdftp,在确保远程服务器开启的情况下,直接在安装路径下键入./cmdftp IP地址即可登陆到对方的服务器,从而实现基本的ftp访问功能。 相关功能增设 在cmdftp的最新版本cmdftp-0.9.7.tar.gz中,在文件上传下载时,仅有传输进度的显示,但是在传输完毕之后缺少对传输用时以及传输速率的显示。我们可以在源码中通过一些系统函数来记录传输用时,并通过与传输文件大小的运算来得到传输速率,从而可以得知我们具体传输网络的传输带宽。 在Linux系统中,记录运行时间的函数比较多,我将在下面介绍两个简单的函数:clock()和gettimeofday()(注:这两个函数的头文件均在time.h中)。 1)clock() clock_t start,end; float time_total; start=clock(); 被测程序段; end=clock(); time_total=((double)(end-start))/CLOCKS_PER_SEC; 注1:关于CLOCK_TCK和CLOCK_PER_SEC:在早期的tc2中,time.h中只有前者;而在gcc中,一般定义后者,或者又有补充定义后者等同前者。 注2:使用clock函数得到的值一般是以秒作为单位的。这个可以具体参见time.h中的定义。 注3:clock函数得到的值并非具体的时间值,而是CPU的时钟数,所以需要通过每秒钟所含的时钟数CLOCK_PER_SEC来换算成具体的秒数。 2) gettimeofday() struct timeval start,end; float time_total; gettimeofday(&start); 被测程序段; gettimeofday(&end); time_total=(end.tv_sec-start.tv_sec)+((float)(end_tv_usec-start.tv_usec))/1000000;(责任编辑:IT) |