fseek ()-fseeko ()- 重新定位文件位置

格式

#include <stdio.h>
int fseek(FILE *stream, long int offset, int origin);
int fseeko(FILE *stream, off_t offset, int origin);

语言级别

ANSI

线程安全

集成文件系统界面

当在编译命令上指定 SYSIFCOPT (*NOIFSIO) 时, fseeko() 函数不可用。

描述

fseek()fseeko() 函数将与 关联的当前文件位置更改为该文件中的新位置。 上的下一个操作将在新位置执行。 在打开以进行更新的 上,下一个操作可以是读操作或写操作。

fseeko() 函数与 fseek() 完全相同,但 offset 参数的类型为 off_t

原点 必须是 <stdio.h>中定义的下列其中一个常量:
起源
定义
SEEK_SET
文件开头
SEEK_CUR
文件指针的当前位置
SEEK_END
文件末尾
对于二进制流,您还可以更改文件末尾以外的位置。 尝试在文件开头之前进行定位会导致错误。 如果成功,那么 fseek()fseeko() 函数将清除文件结束指示符,即使 originSEEK_END时也是如此,并撤销 ungetc() 函数在同一流上的任何前面的作用。
注: 对于以文本方式打开的流, fseek()fseeko() 函数的使用有限,因为某些系统转换 (例如回车符-换行符和换行符之间的转换) 可能会产生意外结果。 对于以文本方式打开的流,可以依赖的唯一 fseek()fseeko() 操作是使用相对于任何源值为零的偏移量进行查找,或者从文件开头使用从对 ftell()ftello() 函数的调用返回的偏移量值进行查找。 ftell()ftello() 函数的调用受其限制。

返回值

如果 fseek()fseeko() 函数成功移动指针,那么它将返回 0 。 非零返回值指示错误。 在无法查找的设备 (例如终端和打印机) 上,返回值为非零。

errno 的值可以设置为:
含义
EBADF
文件指针或描述符无效。
Ebadseek
寻道操作的偏移量不正确。
ENODEV
在错误的设备上尝试了操作。
ENOTOPEN
文件未打开。
ERECIO
文件已打开以进行记录 I/O。
ESTDERR
无法打开 stderr
埃斯特丁
无法打开 stdin
ESTDOUT
无法打开 stdout
EIOERROR
发生了不可恢复的I/O错误。
EIORECERR
发生了可恢复的I/O错误。

使用 type=record打开的文件不支持 fseek()fseeko() 函数。

示例

此示例打开文件 myfile 以进行读取。 执行输入操作后, fseek() 会将文件指针移动到文件的开头。
#include <stdio.h>
#define  MAX_LEN  10
 
int main(void)
{
   FILE *stream;
   char buffer[MAX_LEN + 1];
   int  result;
   int  i;
   char ch;
 
   stream = fopen("mylib/myfile", "r");
   for (i = 0; (i  < (sizeof(buffer)-1) &&
       ((ch = fgetc(stream)) != EOF) && (ch != '\n')); i++)
          buffer[i] = ch;
 
   result = fseek(stream, 0L, SEEK_SET);  /* moves the pointer to the */
                                          /* beginning of the file    */
   if (result == 0)
      printf("Pointer successfully moved to the beginning of the file.\n");
   else
      printf("Failed moving pointer to the beginning of the file.\n");
}

相关信息