有没有办法在linux中创建虚拟文件描述符?

Jee*_*tel 6 c linux file

我用以下方式打开了一个文件:

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个字节.

Kar*_*ath 2

fseek ( 虚拟文件指针 , 0 , SEEK_SET );

简而言之,虚拟指针应该将文件视为该文件中没有 40 个字节,并且所有位置都应相对于第 40 个字节作为第 1 个字节进行计数。

您的需求相互冲突,因此无法使用 C API 执行此操作。

SEEK_SET 始终指文件中的绝对位置,这意味着如果您希望该命令起作用,则必须修改文件并删除垃圾。

在 Linux 上,您可以编写一个FUSE驱动程序来显示文件,就像从第 40 个字节开始一样,但这需要大量工作。我提到这一点只是因为它可以解决您所创建的问题,但实际上这样做是非常愚蠢的。

当然,最简单的事情就是放弃您正在寻找的模拟层想法,并编写可以处理额外标头垃圾的代码。