fseek, _fseeki64
Перемещает указатель файла в указанное расположение.
int fseek(
FILE *stream,
long offset,
int origin
);
int _fseeki64(
FILE *stream,
__int64 offset,
int origin
);
Параметры
stream
Указатель на FILE структура.offset
Количество байтов из origin.origin
Первоначальная позиция.
Возвращаемое значение
В случае успешного выполнения; fseek и _fseeki64 возвращает 0.В противном случае возвращается ненулевое значение.В устройствах неспособных поиск, undefined возвращаемое значение.If stream указатель null или если origin не является одно из описанных ниже значений, допустимых fseek и _fseeki64 вызовите недопустимый обработчик параметра, как описано в разделе Проверка параметров.Если выполнение может быть продолжено, то эти функции установки errno В EINVAL и равен -1.
Заметки
fseek и _fseeki64 функции перемещения указателя файла (если таковые имеются), связанный с stream в новое расположение, которое offset байты из origin*.* Следующая операция в потоке выполняется в новом месте.В потоке, открытом для обновления, следующая операция может быть доступна или записи.Начало координат аргумента должно быть одной из следующих констант определяется в STDIO.H:
SEEK_CUR
Текущее положение указателя файла.SEEK_END
Конец файла.SEEK_SET
начало файла.
Можно использовать fseek и _fseeki64 переместить указатель в любом файле.Указатель также может располагаться за пределами файла.fseek и _fseeki64очищает индикатор конца файла и инвертирует результат any перед ungetc вызовы к stream.
При открытии файла для добавления данных, положение текущего файла определяется последней операцией ввода-вывода, где произошла следующая запись.Если ни одна из операций ввода-вывода, пока не произошла в файле, открытом для добавления позиция файла начало файла.
Для потоков, открытых в режиме текста fseek и _fseeki64использование имеют ограниченную, поскольку переводы строки экипажа могут привести к возвращени-перевода fseek и _fseeki64дать непредвиденные результаты.единственное fseek и _fseeki64операции гарантированные, чтобы работали в потоках, открытых в режиме текст:
Поиск с смещением по отношению к любым 0 значений начала координат.
Поиск с начала файла с значение смещения, возвращаемый в результате вызова ftell при использовании fseekOR _ftelli64при использовании_fseeki64.
Также в этом режиме текст, CTRL+Z, интерпретируется как символ конца файла на входе.В файлах, открытых для чтение/запись fopen весь связанный и проверка процедур для CTRL+Z в конце файла и удаляет его, если это возможно.Это делается, потому что используется комбинация fseek и ftellOR_fseeki64 и _ftelli64, перемещается в файле, который заканчивается CTRL+Z может вызвать fseek OR _fseeki64 функционировать неправильно в конце файла.
При открытии файла CRT, который начинается с порядком байтов mark (спецификацией), указатель файла помещается за спецификацией (то есть в начале фактического содержимого файла).если вы fseek в начало файла используйте ftell получить на первоначальную позицию и fseek на него, а не положение 0.
Эта функция ожидания блокирует другие потоки во время выполнения и поэтому потокобезопасным.Для non-блокируя версий см. в разделе _fseek_nolock, _fseeki64_nolock.
Требования
Функция |
Обязательный заголовок |
---|---|
fseek |
<stdio.h> |
_fseeki64 |
<stdio.h> |
Дополнительные сведения о совместимости см. Совместимость во введении.
Пример
// crt_fseek.c
// This program opens the file FSEEK.OUT and
// moves the pointer to the file's beginning.
#include <stdio.h>
int main( void )
{
FILE *stream;
char line[81];
int result;
if ( fopen_s( &stream, "fseek.out", "w+" ) != 0 )
{
printf( "The file fseek.out was not opened\n" );
return -1;
}
fprintf( stream, "The fseek begins here: "
"This is the file 'fseek.out'.\n" );
result = fseek( stream, 23L, SEEK_SET);
if( result )
perror( "Fseek failed" );
else
{
printf( "File pointer is set to middle of first line.\n" );
fgets( line, 80, stream );
printf( "%s", line );
}
fclose( stream );
}