如何在 C 代码中动态更改/伪造“文件大小”

Posted

技术标签:

【中文标题】如何在 C 代码中动态更改/伪造“文件大小”【英文标题】:How to change/fake the 'file size' on the fly in C code 【发布时间】:2014-10-31 09:52:32 【问题描述】:

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

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

当使用调试器检查时,File A 缓冲区内容看起来很好(包含整个 File B 内容),但是当它显示为 File A 时(比如Vi),我只能看到那些字符作为File A 的大小,但由于File B 的大小更大,即使返回到File A 的缓冲区(复制的File B 数据)有更多要显示的内容,也不会显示整个数据。这是因为File A 的大小较小,当达到File A 的文件大小的字符数时,显示将终止。

我尝试查看struct stat,但它是一个只读的东西,它显示File A 的大小比File B 更小。

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

所以,我的问题是我如何即时伪造/更改File A 的大小,以便它能够显示整个数据(因为File B 更大而叠加)。

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于如何在 C 代码中动态更改/伪造“文件大小”的主要内容,如果未能解决你的问题,请参考以下文章

怎么样在asp程序中限制上传文件大小?

vista下如何设置IIS的上传文件大小

如何使用php更改最大文件大小限制[重复]

c 使用 fstat 问题比较文件大小

如何将大文件上传到 Azure Blob 存储 (.NET Core)

如何更改最大文件大小上传?