Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在无限循环进程中删除打开的文件_Linux_File Io_Process - Fatal编程技术网

Linux 在无限循环进程中删除打开的文件

Linux 在无限循环进程中删除打开的文件,linux,file-io,process,Linux,File Io,Process,我对以下情况表示怀疑 情景: 一个进程或程序首先以写模式打开一个文件,然后进入一个无限循环,例如:while(1),其主体具有写入打开文件的逻辑 问题:如果在进程进入无限循环后不久删除打开或创建的文件,该怎么办?添加一行检查文件是否在while循环期间存在。如果它不存在,请终止循环。在Unix中,用户确实无法删除文件,他们只能删除对文件的引用。内核会在没有引用(硬链接和打开的文件描述符)的情况下删除文件。从你所说的,听起来实际上你不想要无限循环,而是一个带有标志的while循环,某种效果 wh

我对以下情况表示怀疑

情景:

一个进程或程序首先以写模式打开一个文件,然后进入一个无限循环,例如:while(1),其主体具有写入打开文件的逻辑


问题:如果在进程进入无限循环后不久删除打开或创建的文件,该怎么办?添加一行检查文件是否在while循环期间存在。如果它不存在,请终止循环。

在Unix中,用户确实无法删除文件,他们只能删除对文件的引用。内核会在没有引用(硬链接和打开的文件描述符)的情况下删除文件。

从你所说的,听起来实际上你不想要无限循环,而是一个带有标志的while循环,某种效果

 while (file exists)
     perform operation

看起来发生的是您的文件(基本上)消失了

尝试此操作,创建一个文件test.py并将以下内容放入其中:

import os
f = open('out.txt', 'w') # Open file for writing
f.write("Hi Mom!") # Write something
os.remove('out.txt') # Delete the file
try:
    while True: # Do forever
        f.write("Silly English Kanighit!")
except:
    f.close()
然后
$python test.py
并点击回车键。Ctrl-C应该停止执行。这将打开,然后删除文件,然后继续写入不再存在的文件,原因如上所述


但是,如果您真的有不同的问题,例如“如何防止我的文件在写入时被意外删除?”或其他问题,那么最好问这个问题。

我认为这不适用于这个问题-问题是:如果我打开一个文件,进入写入模式,然后进入无限循环,该怎么办。因此,一旦进入循环,我就假设该文件确实存在,因为它是预先打开的。问题中没有任何一个地方声明将在循环中重新打开和关闭,因此我不认为这是一个问题。它确实存在,但不会有被“删除”的链接(文件名)(实际上是未链接的),尽管在Linux上,您仍然可以通过/proc//fd/访问它,但它只会“消失”如果不是那么大的话。尝试删除仍被引用的多GB文件。很明显文件还在,只是文件名真的消失了。当然。如果您真的想在删除文件后获得技术支持(除非您完成了一次奇特的schmancy覆盖),那么它仍然存在;)感谢您的回复,如果被删除,将发生什么?root用户root只是一个用户。只有内核知道何时可以删除文件。