COHERENT manpages
This page displays the COHERENT manpage for fseek() [Seek on file stream].
List of available manpages
Index
fseek() -- STDIO Function (libc) Seek on file stream #include <stdio.h> int fseek(fp, where, how) FILE *fp; long where; int how; fseek() changes where the next read or write operation will occur within the file stream fp. It handles any effects the seek routine might have had on the internal buffering strategies of the system. The arguments where and how specify the desired seek position. where indicates the new seek position in the file. It is measured from the start of the file if how equals SEEK_SET (zero), from the current seek position if how equals SEEK_CUR (one), and from the end of the file if how equals two SEEK_END (two). fseek() differs from its cousin lseek() in that lseek() is a COHERENT system call and takes a file number, whereas fseek() is a STDIO function and takes a FILE pointer. Example This example opens file argv[1] and prints its last argv[2] characters (default, 100). It demonstrates the functions fseek(), ftell(), and fclose(). #include <stdio.h> extern long atol(); void fatal(message) char *message; { fprintf(stderr, "tail: %s\n", message); exit(1); } main(argc, argv) int argc; char *argv[]; { register FILE *ifp; register int c; long nchars, size; if (argc < 2 || argc > 3) fatal("Usage: tail file [ nchars ]"); nchars = (argc == 3) ? atol(argv[2]) : 100L; if ((ifp = fopen(argv[1], "r")) == NULL) fatal("cannot open input file"); /* Seek to end */ if (fseek(ifp, 0L, 2) == -1) fatal("seek error"); /* Find current size */ size = ftell(ifp); size = (size < nchars) ? 0L : size - nchars; /* Seek to point */ if (fseek(ifp, size, 0) == -1) fatal("seek error"); while ((c = getc(ifp)) != EOF) /* Copy rest to stdout */ putchar(c); if (fclose(ifp) == EOF) fatal("cannot close"); exit(0); } See Also fsetpos(), ftell(), libc, lseek() ANSI Standard, §7.9.9.2 POSIX Standard, §8.1 Diagnostics For any diagnostic error, fseek() returns -1; otherwise, it returns zero. If fseek() goes beyond the end of the file, it will not return an error message until the corresponding read or write is performed.