虚拟文件的文件大小
File size of virtual file
我正在使用 FUSE 创建覆盖文件系统,其中的目录使用虚拟实体进行扩充。我将这些实体的文件大小设置为 0,因为我无法知道——在阅读它们之前,这对我来说特别昂贵——它们应该是什么。
但是,似乎进行了明显的优化,因为零长度文件不会引发任何 read
调用(仅 open
和 release
)。
因此,我的问题很简单,我应该将文件大小设置为多少?我知道符号链接有一个文件名长度的大小;鉴于它不是符号链接,这行得通吗?否则,我能做的最好的就是为大小提供一个下限...如果 read
只有文件描述符、块大小和偏移量,大概它会读取 'til EOF 而不是 stat
可以读取的任何内容告诉它。
文件大小必须正确。很多代码都依赖于这些信息,你不能简单地省略它。
这意味着您需要想出一种有效的方法来cache/precalculate此信息。
查看 cmdfs which runs a command on all files in the filesystem. Linux Magazine has an overview article 的来源。
如果事先不知道文件大小,请使用选项 -odirect_io
挂载并设置 st_size = 0
。我希望这会有所帮助。
在 fuse 手册页中:
direct_io
This option disables the use of page cache (file content cache) in the kernel for this filesystem. This has several affects:
1. Each read(2) or write(2) system call will initiate one or more read or write operations, data will not be cached in the kernel.
2. The return value of the read() and write() system calls will correspond to the return values of the read and write operations.
This is useful for example if the file size is not known in advance (before reading it).
我正在使用 FUSE 创建覆盖文件系统,其中的目录使用虚拟实体进行扩充。我将这些实体的文件大小设置为 0,因为我无法知道——在阅读它们之前,这对我来说特别昂贵——它们应该是什么。
但是,似乎进行了明显的优化,因为零长度文件不会引发任何 read
调用(仅 open
和 release
)。
因此,我的问题很简单,我应该将文件大小设置为多少?我知道符号链接有一个文件名长度的大小;鉴于它不是符号链接,这行得通吗?否则,我能做的最好的就是为大小提供一个下限...如果 read
只有文件描述符、块大小和偏移量,大概它会读取 'til EOF 而不是 stat
可以读取的任何内容告诉它。
文件大小必须正确。很多代码都依赖于这些信息,你不能简单地省略它。
这意味着您需要想出一种有效的方法来cache/precalculate此信息。
查看 cmdfs which runs a command on all files in the filesystem. Linux Magazine has an overview article 的来源。
如果事先不知道文件大小,请使用选项 -odirect_io
挂载并设置 st_size = 0
。我希望这会有所帮助。
在 fuse 手册页中:
direct_io This option disables the use of page cache (file content cache) in the kernel for this filesystem. This has several affects: 1. Each read(2) or write(2) system call will initiate one or more read or write operations, data will not be cached in the kernel. 2. The return value of the read() and write() system calls will correspond to the return values of the read and write operations. This is useful for example if the file size is not known in advance (before reading it).