fsetpos
|
Определено в заголовочном файле
<stdio.h>
|
||
Устанавливает индикатор позиции в файле и состояние разбора многобайтовых символов (если применимо) для файлового потока stream в соответствии со значением, на которое указывает pos .
Помимо установки нового состояния разбора и позиции, вызов этой функции отменяет эффекты ungetc и сбрасывает состояние конца файла, если оно установлено.
Если возникает ошибка чтения или записи, устанавливается индикатор ошибки ( ferror ) для потока.
Содержание |
Параметры
| stream | - | файловый поток для модификации |
| pos | - | указатель на объект fpos_t для использования в качестве нового значения индикатора позиции в файле |
Возвращаемое значение
0 при успешном выполнении, иначе ненулевое значение.
Примечания
После перехода в неконечную позицию в широком потоке следующий вызов любой выходной функции может сделать оставшуюся часть файла неопределённой, например, выводя многобайтовую последовательность другой длины.
Пример
fsetpos
с проверкой ошибок
#include <stdio.h> #include <stdlib.h> int main(void) { // Подготовка массива значений с плавающей точкой. #define SIZE 5 double A[SIZE] = {1.0, 2.0, 3.0, 4.0, 5.0}; // Запись массива в файл. FILE * fp = fopen("test.bin", "wb"); fwrite(A,sizeof(double),SIZE,fp); fclose (fp); // Чтение значений с плавающей точкой в массив B. double B[SIZE]; fp = fopen("test.bin","rb"); fpos_t pos; if (fgetpos(fp, &pos)) // текущая позиция: начало файла { perror("fgetpos()"); fprintf(stderr, "fgetpos() failed in file %s at line # %d\n", __FILE__, __LINE__ - 3); exit(EXIT_FAILURE); } int ret_code = fread(B,sizeof(double),1,fp); // чтение одного значения с плавающей точкой // текущая позиция: после чтения одного значения с плавающей точкой printf("%.1f; read count = %d\n", B[0], ret_code); // вывод одного значения с плавающей точкой и ret_code if (fsetpos(fp, &pos)) // сброс текущей позиции на начало файла { if (ferror(fp)) { perror("fsetpos()"); fprintf(stderr, "fsetpos() failed in file %s at line # %d\n", __FILE__, __LINE__ - 5); exit(EXIT_FAILURE); } } ret_code = fread(B, sizeof(double), 1, fp); // повторное чтение первого значения с плавающей точкой printf("%.1f; read count = %d\n", B[0], ret_code); // вывод одного значения с плавающей точкой и ret_code fclose(fp); return EXIT_SUCCESS; }
Возможный вывод:
1.0; read count = 1 1.0; read count = 1
Ссылки
- Стандарт C23 (ISO/IEC 9899:2024):
-
- 7.21.9.3 Функция fsetpos (стр.: TBD)
- Стандарт C17 (ISO/IEC 9899:2018):
-
- 7.21.9.3 Функция fsetpos (стр.: TBD)
- Стандарт C11 (ISO/IEC 9899:2011):
-
- 7.21.9.3 Функция fsetpos (стр. 337)
- Стандарт C99 (ISO/IEC 9899:1999):
-
- 7.19.9.3 Функция fsetpos (стр.: 303)
- Стандарт C89/C90 (ISO/IEC 9899:1990):
-
- 4.9.9.3 Функция fsetpos
Смотрите также
|
получает индикатор позиции в файле
(функция) |
|
|
возвращает текущий индикатор позиции в файле
(функция) |
|
|
перемещает индикатор позиции в файле в определённое место
(функция) |
|
|
C++ documentation
для
fsetpos
|
|