我用以下方式打开了一个文件:
fp = fopen("some.txt","r");
Run Code Online (Sandbox Code Playgroud)
现在在这个文件中,第一个字节可以说40个字节是不必要的数据垃圾,所以我想删除它们.但我无法从该文件中删除该数据,修改或创建该文件的副本而没有那些不必要的数据.
所以我想创建另一个指向文件的虚拟FILE指针,当我将这个虚拟指针传递给执行以下操作的任何其他函数时:
fseek ( dummy file pointer , 0 , SEEK_SET );
Run Code Online (Sandbox Code Playgroud)
然后它应该将文件指针设置在some.txt中的第40个位置.
但是该函数接受一个文件描述符,所以我需要传递一个文件描述符,它将文件视为文件中从未出现的前40个字节.
简而言之,虚拟描述符应该将文件视为那个40字节不在该文件中,并且所有定位操作应该相对于第40个字节计数为第1个字节.
fseek ( 虚拟文件指针 , 0 , SEEK_SET );
简而言之,虚拟指针应该将文件视为该文件中没有 40 个字节,并且所有位置都应相对于第 40 个字节作为第 1 个字节进行计数。
您的需求相互冲突,因此无法使用 C API 执行此操作。
SEEK_SET 始终指文件中的绝对位置,这意味着如果您希望该命令起作用,则必须修改文件并删除垃圾。
在 Linux 上,您可以编写一个FUSE驱动程序来显示文件,就像从第 40 个字节开始一样,但这需要大量工作。我提到这一点只是因为它可以解决您所创建的问题,但实际上这样做是非常愚蠢的。
当然,最简单的事情就是放弃您正在寻找的模拟层想法,并编写可以处理额外标头垃圾的代码。
| 归档时间: |
|
| 查看次数: |
2085 次 |
| 最近记录: |