COHERENT manpages
This page displays the COHERENT manpage for fgetpos() [Get value of file-position indicator].
List of available manpages
Index
fgetpos() -- STDIO Function (libc) Get value of file-position indicator #include <stdio.h> int fgetpos(fp, position) FILE *fp; fpos_t *position; fgetpos() copies the value of the file-position indicator for the file stream pointed to by fp into the area pointed to by position. position is of type fpos_t, which is defined in the header stdio.h. The function fsetpos() can use the information written into position to return the file-position indicator to where it was when fgetpos() was called. fgetpos() returns zero if all went well. If an error occurred, it returns nonzero and sets errno to an appropriate value. Example This example seeks to a random line in a very large file. #include <math.h> #include <stdarg.h> #include <stddef.h> #include <stdio.h> #include <stdlib.h> #include <time.h> void fatal(message) char *message; { fprintf(stderr, "%s\n", message); exit(1); } main(argc, argv) int argc; char *argv[]; { int c; long count; FILE *ifp, *tmp; fpos_t loc; if (argc != 2) fatal("usage: fscanf inputfile\n"); if ((ifp = fopen(argv[1], "r")) == NULL) fatal("Cannot open %s\n", argv[1]); if((tmp = tmpfile()) == NULL) fatal("Cannot build index file"); /* seed random-number generator */ srand ((unsigned int)time(NULL)); for (count = 1;!feof(ifp); count++) { /* for monster files */ if (fgetpos(ifp, &loc)) fatal ("fgetpos error"); if (fwrite(&loc, sizeof(loc), 1, tmp) != 1) fatal("Write fail on index"); rand(); while('\n' != (c = fgetc(ifp)) && EOF != c) ; } count = rand() % count; fseek(tmp, count * sizeof(loc), SEEK_SET); if(fread(&loc, sizeof(loc), 1, tmp) != 1) fatal("Read fail on index"); fsetpos(ifp, &loc); while((c = fgetc(ifp)) != EOF) { if(c =='@') putchar('\n'); else putchar(c); if(c == '\n') break; } } See Also fseek(), fsetpos(), ftell(), libc, rewind() ANSI Standard, §7.9.9.1 Notes The ANSI Standard introduced fgetpos() and fsetpos() to manipulate a file whose file-position indicator cannot be stored within a long. Under COHERENT fgetpos() behaves the same as the function ftell().