3

我最近对我给出的这个问题的答案投了反对票(这只让我有点烦恼:))。该人没有对否决票提供任何解释,这让我开始思考:“为什么要避免生成中间文件?” 尤其是在像 Python 这样的语言中,文件 IO 非常简单。

似乎人们一致认为这是一个坏主意,但我知道中间文件在实践中经常使用。我在一家非常受人尊敬的研究公司工作(假设没有这家公司就不会存在 SO),假设您的程序会生成文件作为输出。我们这样做是因为如果您的程序确实应该成为一个独立的程序,那么它需要可调试的输出以及在进程之间传递其输出的某种方式,以便稍后在我们在下游发现输出中的错误时进行检查。

使用中间文件是否被认为是不好的做法(在上面链接的问题的情况下)?为什么?

4

3 回答 3

2

多线程时会出现中间文件的一个问题。

如果客户端 C1 和 C2 由服务器进程 S 同时处理(可能会或没有分叉成单独的进程、使用的线程或任何并发系统..),当两者都尝试创建相同的中间文件时,您可能会遇到奇怪的问题。

我相信 Unix 的哲学之一是所有程序都应该充当过滤器,但这并不一定意味着在磁盘上创建文件,并且在我看来使用中间文件会导致笨拙的行为。还应将磁盘视为最后的手段,仅将其用于存储/检索关闭计算机电源后应该可用的数据,甚至可能注意允许程序在只读媒体上运行。

于 2010-11-24T13:18:29.277 回答
1

那么,在使用文件的时候会出现一些问题,尤其是在访问或者创建文件的时候可能会出现很多意想不到的失败。以下列出的都是我亲身经历过的所有问题。

1)文件位置在远程机器上,网络不通。(已安装 NFS)。
2) 创建文件时没有足够的可用空间。
3)在进程之间,用户按Ctrl-C取消进程,文件不会被删除。
4)文件挂载在NFS上,网络慢。
5)创建文件的文件夹是软链接,原链接被删除。

但是我们仍然必须使用文件,因为在 bash 中工作时几乎没有任何选项。但在 C、C++ 中,我认为磁盘访问应该被视为最后的手段。程序生成文件作为输出是可以的,如果这是与用户交流的唯一方式。但至少为了中间节省,应尽量减少磁盘文件的使用。

于 2010-11-24T13:43:11.000 回答
0

如果您正确创建临时文件(设置特定于平台的“临时”标志意味着在没有紧急需要时不要将缓存刷新到磁盘)如果任务需要它们,它们是非常好的。

IT 中几乎没有什么东西是您在有充分理由的情况下无法使用的。:-)

于 2010-11-24T13:28:40.597 回答