我有一个需求,其中有一个全局 FILE
指针/描述符。其中一个函数将从这个指针/描述符中读取。与指针/描述符关联的内部指针前进。在此函数返回后,我希望从同一个FILE
指针/描述符读取相同的数据,以及与其他函数读取的数据相同的.。
但是,我无法读取相同的确切数据,因为内部指针已经前进。复制描述符不起作用,因为复制反映了原始的。在读取之前保存FILE
指针也不起作用,因为它是一个指针,并且将再次开始引用相同的内容。
另一种方法是在读取前使用fgetpos()
保存文件位置,在下次读取之前使用fsetpos()
保存文件位置。
但这适用于文件指针,而不是描述符。
有了普通的指点就这么容易了。但是有了FILE
指针,事情就变得很困难。
还有其他不笨拙的方法来实现这一点吗?
发布于 2012-05-22 05:40:03
如果您指的是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-22 05:46:21
另一个选择是使用mmap()
对文件进行内存映射。
这将允许您随意读取文件中的任何位置,而不必使用lseek()
或fseek()
。
您可以在mmap()
上找到一个关于linuxquestions问题的简短教程
发布于 2012-05-22 06:50:13
根据您的描述,我会将该文件指针隐藏在另一个接口后面,该接口缓冲最后读取的数据块,这样代码的不同区域就可以访问相同的数据,而不必将流倒带。
https://stackoverflow.com/questions/10703189
复制相似问题