Courses βeta
C Programming

## fseek() vs rewind()

In C, fseek() should be preferred over rewind().

Note the following text C99 standard:
The rewind function sets the file position indicator for the stream pointed to by stream to the beginning of the file. It is equivalent to

(void)fseek(stream, 0L, SEEK_SET)
except that the error indicator for the stream is also cleared.


This following code example sets the file position indicator of an input stream back to the beginning using rewind(). But there is no way to check whether the rewind() was successful.

#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp = fopen("test.txt", "r");

if ( fp == NULL ) {
/* Handle open error */
}

/* Do some processing with file*/

rewind(fp);  /* no way to check if rewind is successful */

/* Do some more precessing with file */

return 0;
}


In the above code, fseek() can be used instead of rewind() to see if the operation succeeded. Following lines of code can be used in place of rewind(fp);

if ( fseek(fp, 0L, SEEK_SET) != 0 ) {
/* Handle repositioning error */
}