函数
<cstdio>

fseek

int fseek ( FILE * stream, long int offset, int origin );
重新定位流的位置指示器
将与 stream 关联的位置指示器设置为新位置。

对于以二进制模式打开的流,新位置是通过将 offset 添加到由 origin 指定的参考位置来定义的。

对于以文本模式打开的流,offset 必须是零或先前调用 ftell 返回的值,并且 origin 必须是SEEK_SET.

如果使用这些参数的其他值调用该函数,支持情况取决于具体的系统和库实现(不可移植)。

此函数成功调用后,stream文件结束内部指示器会被清除,并且先前对该 stream 调用 ungetc 的所有效果都会被丢弃。

在以更新模式(读+写)打开的流上,调用fseek允许在读取和写入之间切换。

参数

stream
指向一个 FILE 对象的指针,该对象标识了流。
offset
二进制文件:从 origin 开始的偏移字节数。
文本文件:零,或 ftell 返回的值。
origin
用作 offset 的参考位置。它由 <cstdio> 中定义的以下常量之一指定,这些常量仅用于此函数的参数
常量参考位置
SEEK_SET文件开头
SEEK_CUR文件指针的当前位置
SEEK_END文件结尾 *
* 库实现允许不支持有意义地支持SEEK_END(因此,使用它的代码没有真正的标准可移植性)。

返回值

如果成功,则函数返回零。
否则,它返回非零值。
如果发生读写错误,则会设置错误指示器ferror)。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
/* fseek example */
#include <stdio.h>

int main ()
{
  FILE * pFile;
  pFile = fopen ( "example.txt" , "wb" );
  fputs ( "This is an apple." , pFile );
  fseek ( pFile , 9 , SEEK_SET );
  fputs ( " sam" , pFile );
  fclose ( pFile );
  return 0;
}

在成功执行此代码后,文件example.txt包含
This is a sample.


另见