![]() |
![]() |
![]() |
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 );
libc
The fseek() function changes 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. fp is a FILE pointer returned by fopen() or freopen(). The offset is the position to seek to, relative to one of three positions specified by whence.
Valid whence values are:
The fseek() function clears the end-of-file indicator, and undoes any effects of the ungetc() function on the stream.
The ftell() function can be used to get the current position of the stream before changing it. The position can be restored by using the value returned by ftell() in a subsequent call to fseek() with the whence parameter set to SEEK_SET.
0 for success, or nonzero if an error occurs.
If an error occurs, errno will be set to indicate the type of error.
The size of a file can be determined by the following example, which saves and restores 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; fseeko() is standard Unix
Safety: | |
---|---|
Cancellation point | No |
Interrupt handler | No |
Signal handler | Yes |
Thread | Yes |
errno, fgetpos(), fopen(), fsetpos(), ftell()
![]() |
![]() |
![]() |