0

我有一个要求,其中有一个全局 FILE指针/描述符。其中一个函数将从该指针/描述符中读取。与指针/描述符相关的内部指针FILE前进。此函数返回后,我想从相同的FILE指针/描述符以及与另一个函数读取的相同数据中读取。

但是我无法读取相同的确切数据,因为内部指针已经前进。复制描述符不起作用,因为复制镜像原始。在读取之前保存FILE指针也不起作用,因为它是一个指针,并且将再次开始引用同一事物。

一种替代方法是使用fgetpos()before read 和 use fsetpos()before next read 保存文件位置。

但这适用于文件指针而不是描述符。

使用普通指针非常容易。FILE但是指针会变得很困难。

是否有任何其他非笨拙的方法来实现这一目标?

4

3 回答 3

1

如果您指的是 POSIX 文件描述符,听起来您正在寻找lseek().

off_t off;

off = lseek(fd, 0, SEEK_CUR); /* get current offset */
/* do some read(s) */
lseek(fd, off, SEEK_SET);
于 2012-05-22T13:40:03.917 回答
0

根据您的描述,我会将该文件指针隐藏在另一个缓冲最后读取的数据块的接口后面,以便代码的不同区域可以访问相同的数据而无需倒回流。

于 2012-05-22T14:50:13.027 回答
0

另一种选择是使用mmap().

这将允许您随机读取文件中的任何位置,而无需使用lseek()fseek()

你会mmap()linuxquestions找到一个简短的教程

于 2012-05-22T13:46:21.757 回答