在linux上,在ext4分区上有一部电影,如果我打开电影&观看它,然后我移动或重命名电影。
在上一次缓存用完后,需要从原始文件中读取更多缓存,然后仍然可以这样做。
问题是:
文件系统& inode实现了这个目标吗?
答案 0 :(得分:2)
在同一文件系统中的文件上使用rename()
只会更改指向inode的名称。您甚至可以使用rename()
将该名称移动到另一个目录中 - 只要它位于同一文件系统中:
rename()函数应更改文件名。老人 参数指向要重命名的文件的路径名。新的 参数指向文件的新路径名。 ...
请注意,rename()
的POSIX规范比C标准rename()
规范更具体:
7.21.4.2
rename
功能<强>概要强>
#include <stdio.h> int rename(const char *old, const char *new);
<强>描述强>
重命名功能会导致名称为字符串指向的文件 由
old
到今后通过字符串给出的名称来知道 由new
指出。名为old
的文件不再可供访问 那个名字。如果由new
指向的字符串命名的文件存在 在调用rename
函数之前,行为是 实现定义的。<强>返回强>
在
rename
如果操作成功,则函数返回零,如果失败则返回非零值, 269) 在 如果该文件先前存在,则该文件的原始名称仍为其所知。
(这是rename()
的整个C标准规范。请阅读POSIX link以获取更多信息。)
那么如何在应用程序中观看文件时重命名文件?您的电影观看过程的打开文件描述符用于访问您rename()
并未发生变化的文件的基础inode。
这就是为什么你可以在文件正在使用时unlink()
(删除)文件的原因相同 - 你所做的就是删除指向的文件 inode - 链接之一到inode。在删除与inode的 last 链接之前,文件使用的空间不会被释放 - 并且打开的文件描述符将被视为链接。这也是为什么删除文件的目录条目的函数被称为unlink()
- 这就是它的全部功能。是的,文件(inode)可以有多个指向它的链接。