Change the current position of a stream
#include <stdio.h>
int fseek( FILE *fp,
long offset,
int whence );
int fseeko( FILE *fp,
off_t offset,
int whence );
int fseeko64( FILE *fp,
off64_t offset,
int whence );
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
The fseek(), fseeko(), and fseeko64() functions change the current position of the stream specified by fp. This position defines the character that will be read or written by the next I/O operation on the file. The difference between these functions is the data type of the offset argument. The fseeko64() function is a large-file support version of fseeko().
These functions clear the end-of-file indicator, and undo any effects of the ungetc() function on the stream.
You can use ftell(), ftello(), or ftello64() to get the current position of the stream before changing it. You can restore the position by using the value returned by one of the ftell() functions in a subsequent call to the corresponding fseek() function with the whence parameter set to SEEK_SET.
These functions fail if, either the stream is unbuffered or the stream's buffer needed to be flushed, and the call to fseek(), fseeko(), or fseeko64() causes an underlying lseek() or write() to be invoked, and:
Determine the size of a file, by saving and restoring the current position of the file:
#include <stdio.h>
#include <stdlib.h>
long filesize( FILE *fp )
{
long int save_pos;
long size_of_file;
/* Save the current position. */
save_pos = ftell( fp );
/* Jump to the end of the file. */
fseek( fp, 0L, SEEK_END );
/* Get the end position. */
size_of_file = ftell( fp );
/* Jump back to the original position. */
fseek( fp, save_pos, SEEK_SET );
return( size_of_file );
}
int main( void )
{
FILE *fp;
fp = fopen( "file", "r" );
if( fp != NULL ) {
printf( "File size=%ld\n", filesize( fp ) );
fclose( fp );
return EXIT_SUCCESS;
}
return EXIT_FAILURE;
}
fseek() is ANSI, POSIX 1003.1; fseeko() is POSIX 1003.1; fseeko64() is Large-file support
| Safety: | |
|---|---|
| Cancellation point | Yes |
| Interrupt handler | No |
| Signal handler | Yes |
| Thread | Yes |
errno, fgetpos(), fopen(), fsetpos(), ftell(), ftello(), ftello64()