- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
使用函数 fgetpos()
和 fsetpos()
与使用函数 ftell()
和 fseek 有什么区别()
获取和设置文件中的位置?
fgetpos()
和 fsetpos()
有什么用?为什么要使用它们来代替 ftell()
和 fseek()
?
最佳答案
以上答案都不正确 - 事实上,如果您将 fsetpos
与 fseek
互换使用,您可能会引入安全漏洞 (https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=20087255) .
原因是 fsetpos
的 fpos_t *pos
参数实际上不是一个整数,因此它不能用于查找文件中的任意位置。因此,唯一有效的值是从 fgetpos
获得的值。正如文档所说,
The internal file position indicator associated with stream is set to the position represented by
pos
, which is a pointer to anfpos_t
object whose value shall have been previously obtained by a call tofgetpos
.
( http://www.cplusplus.com/reference/cstdio/fsetpos/ )
如果你想要的只是能够搜索到超过 32 位边界的任意位置,那么使用 ftello
/fseeko
并使用 #define _FILE_OFFSET_BITS 64 进行编译
。
关于c - fgetpos/fsetpos 和 ftell/fseek 之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3348637/
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
在 fopen 的 C 标准中,关于以更新模式打开的文件 (C11 7.21.5.3/7),输出后跟输入需要对 fflush 或文件定位函数(fseek、fsetpos 或 rewind)的中间调用。
我的问题是我无法落后。两个函数似乎最让我困惑,如果可能是我忽略的一件小事,但从我的结果来看,我只是没有看到它。 还有其他和我类似的问题。 Jet 我选择提出这个问题是因为我认为这可能会导致其他两个问题
ftello/fseeko 和fgetpos/fsetpos 有什么区别?两者似乎都是文件指针获取/设置函数,它们使用不透明的偏移类型有时允许 64 位偏移。 它们是否受不同平台或不同标准的支持?它使
使用函数 fgetpos() 和 fsetpos() 与使用函数 ftell() 和 fseek 有什么区别() 获取和设置文件中的位置? fgetpos() 和 fsetpos() 有什么用?为什么
我了解 ftell() 和 fseek() 在 C 中的工作原理,但是对于这个问题,我在任何地方都找不到任何准确的答案,包括 StackOverflow 上最近的帖子(LINK)。 那么请您回答以下问
哈!!我该如何把整个事情放在一个清晰的问题中!!让我试试: 我知道使用fopen()打开的文件被缓冲到内存中。我们使用缓冲区来提高效率和方便性。在从文件读取期间,文件的内容首先被读取到缓冲区,然后我们
虽然我知道 fpos_t 是一种不透明类型,旨在由 fgetpos() 函数初始化,C99 rationale 的 §7.19.9.1|指出: fgetpos and fsetpos were add
我是一名优秀的程序员,十分优秀!