相关地址
查了那么多版本,最终选的一个 vsftpd-2.3.4版本,使用3.0.2或者3.0.3在运行的时候都提示段错误
vsftpd-2.3.4下载地址: https://github.com/ChenChangXiong/vsftpd-2.3.4
1.编译vsftpd-2.3.4
修改这两个地方就可以直接编译 make -j20
经过flashxp提示的Log信息,定位到ftp每次上传完成都会调用 postlogin.c 中的函数
vim postlogin.c +912
修改为在上传完成以后,在/tmp/下面创建一个文件,然后写一个脚本或者程序去检测这个文件夹下面是否生成了finish.txt文件,就知道是不是成功的传输完成,我这里需要做的就是在传输完成以后,给一个sync同步命令,防止在系统突然掉电的时候30秒以内,会出现不保存的情况
2. 检测文件是否完成
下面是检测文件是否存在的程序,也可以使用脚本去检测,但是脚本的还是总是提示一些无法屏蔽,这样在debug终端一直输出看着不好,所以选择使用这样的方式,编译以后在启动脚本中运行下面命令,就可以做到一直检测
app_check & /dev/null
程序中延时了0.4秒,也就是传输完成以后在0.4秒以内就会sync,如果不延时速度更快,但是会造成cpu一直工作,相当于热机满载一直工作,这样对cpu寿命有很大影响,加入了延时就可以减少cpu使用率
本来可以通过修改系统缓存写入到磁盘的时间,这样也可以加快缓存写入,但是这样还是治标不治本,因为大多数时候是不需要使用ft[传输文件的
本来我是考虑在传输完成以后直接使用 system(“sync”) ,但是在使用的时候,发现使用system以后就会造成vsftp无法使用,直接不能传输,这是一个很严重的问题,可能是system打乱了程序的机制,集体没有研究,所以为了保持程序的完整性,最好不要使用system,我直接程序中创建一个文件也很简单,而且这样做也更加安全