c - 如何在 C 代码中动态更改/伪造 'file size'

标签 c filesystems size filesize stat

我正在使用 FUSE 开发用户级文件系统,我的要求是:

  • 当我对文件 A 发出读取指令时,我想叠加另一个文件(例如文件 B)的内容并呈现文件 B 作为文件 A 的内容。
  • 我已经通过缓冲区修改实现了这一目标,方法是将其捕获在我的熔丝读取中并内部读取文件 B 并将缓冲区内容复制到传入的文件 A 缓冲区并且没有对文件 A 进行任何实际的读取调用。因此,文件 A 调用返回时,文件 B 的内容已复制到其缓冲区中。
  • 此外,与文件 B 相比,文件 A 的大小更小。

使用调试器检查时,文件 A 缓冲区内容看起来不错(包含整个文件 B 内容),但是当它显示时(例如使用 Vi) 对于文件 A,我只能看到与文件 A 大小相同的字符,但与 文件 B 一样size 越大,即使返回到文件 A 的缓冲区(复制的文件 B 数据)有更多要显示的数据,也永远不会显示整个数据。这是因为文件 A 的大小较小,并且当达到文件 A 的文件大小的字符数时,显示终止。

我尝试查看struct stat,但它是一个只读的东西,它显示了文件A的大小,它比文件B要小.

struct stat stat1;
stat(fileA, &stat1);

所以,我的问题是如何动态伪造/更改File A的大小,以便它能够显示整个数据(由于 >文件 B 更大)。

最佳答案

您将无法执行此操作,因为许多应用程序在读取文件之前会请求文件大小,然后仅读取报告的数据量。

关于c - 如何在 C 代码中动态更改/伪造 'file size',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26671731/

相关文章:

python - 禁止在 Python 中访问 exec 和 eval 中的文件系统

c++ - 堆栈帧的大小总是固定的?

python - 需要帮助在 mac os x 上安装 python 包 autopy - libpng 和 png.h 有困难

c 将字符串逐行写入文件

c++ - 在 Linux 中创建动态库并使用 Visual Studio Linux Development 链接到它

c++ - 当应用程序崩溃时,linux 缓冲区缓存的行为如何?

linux - 为什么我的新文件没有显示?

c# - 如何在 C# 中查找类的大小

iphone - iPhone的屏幕分辨率是320x460还是320x480?

c - 如何从 ZLIB 压缩器获取 <距离,长度> 对