ftell
Определена в заголовочном файле <stdio.h> | ||
|---|---|---|
long ftell( FILE* stream ); |
Возвращает индикатор позиции в файловом потоке stream.
Если поток открыт в двоичном режиме, значение, полученное этой функцией, представляет собой количество байтов от начала файла.
Если поток открыт в текстовом режиме, значение, возвращаемое этой функцией, не определено и имеет смысл только в качестве входного значения для fseek().
Параметры
| stream | - | файловый поток для проверки |
Возвращаемое значение
Индикатор позиции в файле при успешном выполнении или -1L в случае ошибки.
При ошибке переменной errno присваивается положительное значение, определяемое реализацией.
Примечания
В Windows для работы с файлами размером более 2 ГиБ можно использовать _ftelli64.
Пример
Демонстрирует ftell() с проверкой ошибок. Записывает в файл, а затем считывает из него несколько значений с плавающей точкой (FP).
#include <stdio.h>
#include <stdlib.h>
/* If the condition is not met then exit the program with error message. */
void check(_Bool condition, const char* func, int line)
{
if (condition)
return;
perror(func);
fprintf(stderr, "%s failed in file %s at line # %d\n", func, __FILE__, line - 1);
exit(EXIT_FAILURE);
}
int main(void)
{
/* Prepare an array of FP values. */
#define SIZE 5
double A[SIZE] = {1.1, 2.0, 3.0, 4.0, 5.0};
/* Write array to a file. */
const char* fname = "/tmp/test.bin";
FILE* file = fopen(fname, "wb");
check(file != NULL, "fopen()", __LINE__);
const int write_count = fwrite(A, sizeof(double), SIZE, file);
check(write_count == SIZE, "fwrite()", __LINE__);
fclose(file);
/* Read the FP values into array B. */
double B[SIZE];
file = fopen(fname, "rb");
check(file != NULL, "fopen()", __LINE__);
long int pos = ftell(file); /* position indicator at start of file */
check(pos != -1L, "ftell()", __LINE__);
printf("pos: %ld\n", pos);
const int read_count = fread(B, sizeof(double), 1, file); /* read one FP value */
check(read_count == 1, "fread()", __LINE__);
pos = ftell(file); /* position indicator after reading one FP value */
check(pos != -1L, "ftell()", __LINE__);
printf("pos: %ld\n", pos);
printf("B[0]: %.1f\n", B[0]); /* print one FP value */
return EXIT_SUCCESS;
}
Возможный вывод:
pos: 0 pos: 8 B[0]: 1.1
Ссылки
- Стандарт C23 (ISO/IEC 9899:2024):
- 7.21.9.4 Функция ftell (стр.: TBD)
- Стандарт C17 (ISO/IEC 9899:2018):
- 7.21.9.4 Функция ftell (стр.: TBD)
- Стандарт C11 (ISO/IEC 9899:2011):
- 7.21.9.4 Функция ftell (стр.: 337-338)
- Стандарт C99 (ISO/IEC 9899:1999):
- 7.19.9.4 Функция ftell (стр.: 303-304)
- Стандарт C89/C90 (ISO/IEC 9899:1990):
- 4.9.9.4 Функция ftell
См. также
| получает индикатор позиции в файле (функция) |
|
| перемещает индикатор позиции в файле в заданное место (функция) |
|
| перемещает индикатор позиции в файле в заданное место (функция) |
|
Документация по C++ для ftell |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/io/ftell