std:: fsetpos
|
Определено в заголовочном файле
<cstdio>
|
||
|
int
fsetpos
(
std::
FILE
*
stream,
const
std::
fpos_t
*
pos
)
;
|
||
Устанавливает индикатор позиции в файле и состояние разбора многобайтовых символов (если применимо) для файлового потока C
stream
в соответствии со значением, на которое указывает
pos
.
Помимо установки нового состояния разбора и позиции, вызов этой функции отменяет эффекты std::ungetc и сбрасывает состояние конца файла, если оно установлено.
Если возникает ошибка чтения или записи, устанавливается индикатор ошибки ( std::ferror ) для потока.
Содержание |
Параметры
| stream | - | файловый поток для изменения |
| pos | - | указатель на объект fpos_t полученный с помощью std::fgetpos вызванного на потоке, связанном с тем же файлом |
Возвращаемое значение
0 при успешном выполнении, ненулевое значение в противном случае. Также устанавливает errno при ошибке.
Примечания
После перехода в неконечную позицию в широком потоке следующий вызов любой выходной функции может сделать оставшуюся часть файла неопределённой, например, выводя многобайтовую последовательность другой длины.
Пример
#include <cstdio> #include <cstdlib> int main() { // Подготовить массив значений с плавающей точкой. const int SIZE = 5; double A[SIZE] = {1., 2., 3., 4., 5.}; // Записать массив в файл. std::FILE * fp = std::fopen("test.bin", "wb"); std::fwrite(A, sizeof(double), SIZE, fp); std::fclose(fp); // Прочитать значения в массив B. double B[SIZE]; fp = std::fopen("test.bin", "rb"); std::fpos_t pos; if (std::fgetpos(fp, &pos) != 0) // текущая позиция: начало файла { std::perror("fgetpos()"); std::fprintf(stderr, "fgetpos() failed in file %s at line # %d\n", __FILE__, __LINE__-3); std::exit(EXIT_FAILURE); } int ret_code = std::fread(B, sizeof(double), 1, fp); // прочитать одно значение // текущая позиция: после чтения одного значения std::printf("%.1f; read count = %d\n", B[0], ret_code); // вывести одно значение и ret_code if (std::fsetpos(fp, &pos) != 0) // сбросить текущую позицию на начало файла { if (std::ferror(fp)) { std::perror("fsetpos()"); std::fprintf(stderr, "fsetpos() failed in file %s at line # %d\n", __FILE__, __LINE__-5); std::exit(EXIT_FAILURE); } } ret_code = std::fread(B, sizeof(double), 1, fp); // перечитать первое значение std::printf("%.1f; read count = %d\n", B[0], ret_code); // вывести одно значение и ret_code std::fclose(fp); return EXIT_SUCCESS; }
Вывод:
1.0; read count = 1 1.0; read count = 1
Смотрите также
|
получает индикатор позиции в файле
(функция) |
|
|
возвращает текущий индикатор позиции в файле
(функция) |
|
|
перемещает индикатор позиции в файле в определённое место
(функция) |
|
|
Документация C
для
fsetpos
|
|