ftell ()-ftello ()- 获取当前位置

格式

#include <stdio.h>
long int ftell(FILE *stream);
off_t ftello(FILE *stream);

语言级别

ANSI

线程安全

集成文件系统界面

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

描述

ftell()ftello() 函数查找与 关联的文件的当前位置。 对于固定长度的二进制文件,返回的值是相对于 开头的偏移量。

对于 QSYS 库系统中的文件, ftell()ftello() 函数返回固定格式二进制文件的相对值以及其他文件类型的编码值。 必须在对 fseek()fseeko() 函数的调用中使用此编码值,以找到文件开头以外的位置。

返回值

ftell()ftello() 函数返回当前文件位置。 发生错误时, ftell()ftello() 分别返回 –1, cast to longoff_t ,并将 errno 设置为非零值。

errno 的值可以设置为:
含义
ENODEV
在错误的设备上尝试了操作。
ENOTOPEN
文件未打开。
ENUMMBRS
该文件已打开以进行多成员处理。
ENUMRECS
记录过多。
ERECIO
文件已打开以进行记录 I/O。
ESTDERR
无法打开 stderr
埃斯特丁
无法打开 stdin
ESTDOUT
无法打开 stdout
EIOERROR
发生了不可恢复的I/O错误。
EIORECERR
发生了可恢复的I/O错误。

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

示例

此示例打开文件 mylib/myfile 以进行读取。 它读取足够多的字符来填充一半的缓冲区,并打印出流和缓冲区中的位置。
#include  <stdio.h>
 
#define NUM_ALPHA  26
#define NUM_CHAR    6
 
int main(void)
{
  FILE * stream;
  int i;
  char ch;
 
  char buffer[NUM_ALPHA];
  long position;
 
  if (( stream = fopen("mylib/myfile", "r")) != NULL )
  {
    /* read into buffer */
    for ( i = 0; ( i  < NUM_ALPHA/2 ) && ((buffer[i] = fgetc(stream)) != EOF ); ++i )
        if (i==NUM_CHAR-1)  /* We want to be able to position the */
                            /* file pointer to the character in   */
                            /* position NUM_CHAR                  */
           position = ftell(stream);
 
    buffer[i] = '\0';
  }
  printf("Current file position is %d\n", position); 
  printf("Buffer contains: %s\n", buffer);
}

相关信息