我正在运行一个在某个目录中创建一堆文件的程序,我希望看到这些文件被创建。
我打开两个终端窗口并将其中一个(称为终端A)发送到程序目录(这样我可以运行它),另一个(终端B)到输出文件写入的目录(这个输出目录开始为空)。当我在终端A的输出目录中touch
,然后在终端B中ls
时,出现新文件 - 所有这些都表现正常。
但是,在终端A中运行程序后,当我在终端B中ls
时,没有新文件出现。奇怪的是,如果我cd .
那么终端B中的em> ls
,新文件现在已列出。
造成这种行为的原因是什么,我可以绕过它吗?
编辑:有关编写文件的信息。
cv2.imwrite(...)
来编写的。ofstream
在C ++中编写的。答案 0 :(得分:4)
这一系列事件似乎重现了这个问题。
终端A中的程序可能会删除终端B的当前目录,然后使用相同的名称重新创建它,因此ls
不起作用,因为终端cd
所指的特定目录B不再存在。但是,cd .
会将您带到(现在)重新创建的目录,此时ls
会再次运行。
答案 1 :(得分:2)
如果您的第二个目录被删除并重新创建,则会发生这种情况。
即使目录被删除,但某些进程将其作为当前目录,它的文件描述符仍将保持打开状态,ls
将显示旧内容。
执行cd .
将强制关闭现在不存在的目录的描述符并再次重新打开它,现在显示新内容。