fseek() vs rewind() in C

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.

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 */


This article is contributed by Rahul Gupta. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

GATE CS Corner    Company Wise Coding Practice

Recommended Posts:

Writing code in comment? Please use ide.geeksforgeeks.org, generate link and share the link here.