熔断写入时如何获取整个文件大小
How to get entire file size when fuse write
我正在开发一个基于fuse的文件系统。
但在开发过程中遇到困难。
我的问题是'how to get entire file size when fuse_write'。
在fuse_write,
static int test_fuse_write(const char *path, const char *buf, size_t size,
off_t offset, struct fuse_file_info *fi)
这些参数与源文件无关。仅与目标文件有关。
我想要一个总文件大小。
例如,将ext4文件系统中的文件'A'复制到fuse文件系统中的文件'B'。如果文件 'A' 的大小是 12MB,当 fuse_write 函数第一次调用时,有没有办法知道文件大小(12MB)?
对不起,我的英语水平不够。
答案是否定的
不考虑 fuse 文件系统,write 是文件系统操作,而 "copy" 是用户实用程序(例如 cp 在 Unix 中)。复制实用程序对源文件执行 read 操作,对目标文件执行 write 操作。 读和写是彼此的"unaware"。你可以在 source code of cp
更重要的是,任何由用户实用程序完成的 read 和 write 操作都会被内核分成通常大小相同的后续块(例如 64K)。因此,在您作为一系列(比方说)64K 长度的后续调用实现 fuse 写入函数时,将看到几兆字节长度的数据写入操作。
您应该感到鼓舞,因为这正是您在编写 fuse 文件系统时获得的启蒙类型...
我正在开发一个基于fuse的文件系统。 但在开发过程中遇到困难。
我的问题是'how to get entire file size when fuse_write'。
在fuse_write,
static int test_fuse_write(const char *path, const char *buf, size_t size,
off_t offset, struct fuse_file_info *fi)
这些参数与源文件无关。仅与目标文件有关。 我想要一个总文件大小。
例如,将ext4文件系统中的文件'A'复制到fuse文件系统中的文件'B'。如果文件 'A' 的大小是 12MB,当 fuse_write 函数第一次调用时,有没有办法知道文件大小(12MB)?
对不起,我的英语水平不够。
答案是否定的
不考虑 fuse 文件系统,write 是文件系统操作,而 "copy" 是用户实用程序(例如 cp 在 Unix 中)。复制实用程序对源文件执行 read 操作,对目标文件执行 write 操作。 读和写是彼此的"unaware"。你可以在 source code of cp
更重要的是,任何由用户实用程序完成的 read 和 write 操作都会被内核分成通常大小相同的后续块(例如 64K)。因此,在您作为一系列(比方说)64K 长度的后续调用实现 fuse 写入函数时,将看到几兆字节长度的数据写入操作。
您应该感到鼓舞,因为这正是您在编写 fuse 文件系统时获得的启蒙类型...