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 long 和 off_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);
}