| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 | #include <stdio.h>#include <string.h>#include <errno.h>#include <dirent.h>#include <stdlib.h>intmain (int argc, char *argv[]){  DIR * dirp;  long int save3 = 0;  long int cur;  int i = 0;  int result = 0;  struct dirent *dp;  long int save0;  long int rewind;  dirp = opendir (".");  if (dirp == NULL)    {      printf ("opendir failed: %s\n", strerror(errno));      return 1;    }  save0 = telldir (dirp);  if (save0 == -1)    {      printf ("telldir failed: %s\n", strerror(errno));      result = 1;    }  for (dp = readdir (dirp); dp != NULL; dp = readdir (dirp))    {      /* save position 3 (after fourth entry) */      if (i++ == 3)	save3 = telldir (dirp);      printf ("%s\n", dp->d_name);      /* stop at 400 (just to make sure dirp->__offset and dirp->__size are	 scrambled */      if (i == 400)	break;    }  printf ("going back past 4-th entry...\n");  /* go back to saved entry */  seekdir (dirp, save3);  /* Check whether telldir equals to save3 now.  */  cur = telldir (dirp);  if (cur != save3)    {      printf ("seekdir (d, %ld); telldir (d) == %ld\n", save3, cur);      result = 1;    }  /* print remaining files (3-last) */  for (dp = readdir (dirp); dp != NULL; dp = readdir (dirp))    printf ("%s\n", dp->d_name);  /* Check rewinddir */  rewinddir (dirp);  rewind = telldir (dirp);  if (rewind == -1)    {      printf ("telldir failed: %s\n", strerror(errno));      result = 1;    }  else if (save0 != rewind)    {      printf ("rewinddir didn't reset directory stream\n");      result = 1;    }  closedir (dirp);  return result;}
 |