我正在尝试使用文件描述符获取全貌。假设我有最初具有这些文件描述符的 process1:
_process1_
| |
| 0 stdin |
| 1 stdout |
| 2 stderr |
|__________|
Run Code Online (Sandbox Code Playgroud)
然后我关闭文件描述符 1:
close(1);
Run Code Online (Sandbox Code Playgroud)
文件描述符 1 将(指向)转换为内核的Open Files Table 中的 stdout FILE 结构。
使用上面的代码,文件描述符 1 从进程表中删除,变成:
_process1_
| |
| 0 stdin |
| 2 stderr |
|__________|
Run Code Online (Sandbox Code Playgroud)
但是在内核中发生了什么?stdoutFILE 结构是否被解除分配?如果 stdout 是一个特殊文件(监视器)并且可能被其他进程使用,那怎么可能呢?FILE 结构只是普通文件(例如.txt)呢?如果其他进程正在使用这样的文件怎么办?
我试图删除一些文件和文件夹,但我不能,因为系统不断重新创建文件。
所有这些文件都命名为.nfsXXXX,其中XXXX是一些随机的 4 字符十六进制数。每当我删除其中一个文件时,它都会创建另一个名称不同但内容相同的文件。
这发生在几个不相关的目录中。什么可能导致这种情况,我该如何解决?