文件传输系统的两个bug

来源:4-16 本章总结

Mr__Xin

2022-04-01

  1. 上传文件后,无论是选择模式一还是模式二(pType==1 / pType==2),客户端根目录下的文件夹都不会被删除,只是将除了文件夹以外的文件删除或挪走了。
    图片描述
    我想到的一个解决方案是任务完成后递归遍历一遍根目录,删除空文件夹。但是这个办法有点笨,请问有无更好的办法?
  2. 文件传输系统没有判别待上传的文件是否正在被另一个进程修改,所以可能会上传一个“旧版本”或者“混合版本”的文件,然后这个文件被删除或挪走,造成竞争问题。
    我认为其他进程修改文件时,可以在写入时添加.tmp后缀再复原,防止被文件传输系统操作。可是改文件名这个操作也不是原子的,还是存在竞争的风险,请问应该如何解决呢?加内核锁是一个解决方案吗?
写回答

1回答

长歌_吴从周

2022-04-02

第一个问题:目录下没文件了,并不表示它没用了,不一定要删除它,说不定一会又有文件了呢。如果真的要删除,可以另写一个小工具程序,没必要整那么麻烦。

第二个问题:在课程中,都采用了.tmp的命名方法,还有文件改为是从无到有,不存在竞争的问题,如果有多个进程生成相同的文件名,一起改名,会有竞争,但是,我们可以在程序设计避免这些问题,生成文件的时候可以加上进程编号。

我认为,你这种认真的态度是很好的,但是,对某些细节不必过于执着,不小心可能会钻牛角尖。

遇到问题的时候,一定要思考如何用最简单的方法、最小的代价去解决它。

2
1
Mr__Xin
您说的非常好,但我这里系统不让采纳,抱歉。
2022-04-03
共1条回复

C/C++气象数据中心实战,手把手教你做工业级项目

通过技术的实际应用,掌握等同2年经验的技术能力

968 学习 · 401 问题

查看课程