- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
ftello
/fseeko
和fgetpos
/fsetpos
有什么区别?两者似乎都是文件指针获取/设置函数,它们使用不透明的偏移类型有时允许 64 位偏移。
它们是否受不同平台或不同标准的支持?它使用的偏移类型是否更灵活?
而且,顺便说一下,我知道 what is difference between fgetpos/fsetpos and ftell/fseek ,但这不是重复项。该问题询问有关 ftell/fseek 的问题,答案不适用于 ftello/fseeko。
最佳答案
参见 Portable Positioning有关差异的详细信息。摘录:
On some systems where text streams truly differ from binary streams, it is impossible to represent the file position of a text stream as a count of characters from the beginning of the file. For example, the file position on some systems must encode both a record offset within the file, and a character offset within the record.
As a consequence, if you want your programs to be portable to these systems, you must observe certain rules:
- The value returned from ftell on a text stream has no predictable relationship to the number of characters you have read so far. The only thing you can rely on is that you can use it subsequently as the offset argument to fseek or fseeko to move back to the same file position.
- In a call to fseek or fseeko on a text stream, either the offset must be zero, or whence must be SEEK_SET and the offset must be the result of an earlier call to ftell on the same stream.
- The value of the file position indicator of a text stream is undefined while there are characters that have been pushed back with ungetc that haven't been read or discarded. See Unreading.
简而言之:fgetpos/fsetpos 使用更灵活的结构来存储有关文件位置状态的额外元数据,从而实现更大的可移植性(理论上)。
关于c - ftello/fseeko 与 fgetpos/fsetpos,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12119132/
更新:为了解决下面的问题,我已经完成了 if (ftell(m_pFile) != m_strLine.size()) fseek(m_pFile, m_strLine.size(), SEE
我是 C 的新手,我有这段代码: f = fopen( argv[1], "rb" ); fseek( f, 64, SEEK_SET ); fpos_t pos; fgetpos (f, &pos)
考虑这两个文件: file1.txt(Windows 换行符) abc\r\n def\r\n file2.txt(Unix 换行符) abc\n def\n 我注意到对于 file2.txt,使用
当我使用 fgetpos(fp,&pos) 时,调用将 pos 设置为负值,其中 pos 的类型为 fpos_t。有人可以解释为什么会这样吗? #include #include #include #
我们如何使用fgetpos()来获取文件的大小?我实际上想显示一个大文件的文件大小(3-10 Gb) 最佳答案 尝试 FILE * fp = fopen(filename, "r"); // seek
如果我运行: FILE* pFile = fopen("c:\\08.bin", "r"); fpos_t pos; char buf[5000]; int ret = fread(&buf, 1,
ftello/fseeko 和fgetpos/fsetpos 有什么区别?两者似乎都是文件指针获取/设置函数,它们使用不透明的偏移类型有时允许 64 位偏移。 它们是否受不同平台或不同标准的支持?它使
使用函数 fgetpos() 和 fsetpos() 与使用函数 ftell() 和 fseek 有什么区别() 获取和设置文件中的位置? fgetpos() 和 fsetpos() 有什么用?为什么
在 Visual C++ 2008 中,我想“捕获”生成的异常,如下所示: try { int foo = 20; ::fgetpos(0, (fpos_t*)&foo); } //.
我了解 ftell() 和 fseek() 在 C 中的工作原理,但是对于这个问题,我在任何地方都找不到任何准确的答案,包括 StackOverflow 上最近的帖子(LINK)。 那么请您回答以下问
我正在编写一些多平台 C++ 代码。因此需要使用 fopen、fgetpos 等。以下内容早些时候在 iOS 上运行,但随着我更新到最新版本,它停止运行。 我的 Shaders 文件夹中有几个文本文件
我是一名优秀的程序员,十分优秀!