Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
sf_file(3)		    Library Functions Manual		    sf_file(3)

NAME
       initfdpos,  initFILEpos,	adjfdpos, adjFILEpos --	file positions indica-
       tor handling

SYNOPSIS
       #include	<stdio.h>
       #include	<strfunc.h>

       int
       initfdpos(const char *fname, int	stream,	const char *ext);

       int
       initFILEpos(const char *fname, FILE *stream, const char *ext);

       int
       adjfdpos(int stream, int	posfd, int doSync);

       int
       adjFILEpos(FILE *stream,	int posfd, int doSync);

DESCRIPTION
       Those functions are used	to maintain a file positions indicator between
       the program sessions. This is often needed  when	 a  process  is	 being
       parsed a	log file and tries to save current position within this	log to
       start from this point later.

       int initfdpos(const char	*fname,	int stream, const char *ext) creates a
       position	 indicator file	"<fname>.<ext>", and returns its file descrip-
       tor. If the position file is already exists, then it advances  stream's
       position	  according   to  the  information  derived  from  that	 file.
       initfdpos also checks the file size and inode changes in	 order	to  be
       robust in situations when file shrinked or replaced.

       int  initFILEpos() is almost the	same except that it takes a FILE * ar-
       gument instead of plain file descriptor.

       Both functions returns position file descriptor,	or -1 in case of fail-
       ure.

       int adjfdpos(int	stream,	int posfd, int doSync) and adFILEdpos()	writes
       the current position within the file  referenced	 by  stream  into  the
       posfd.  If doSync is not	zero, it also does fsync(2).

       Return values: 0	(Success) or -1	in case	of any errors.

EXAMPLE
       void main() {
	       int posfd;
	       FILE *logfile;
	       char buf[1042];

	       logfile = fopen("file.log", "r");
	       if(!logfile)
		       exit(EX_NOINPUT);

	       while(fgets(buf,	sizeof(buf), logfile)) {
		       /* Do something ... */

		       adjFILEpos(logfile, posfd, 0);
	       };

	       /* Force	data to	be flushed on disk. */
	       adjFILEpos(logfile, posfd, 1);
	       fclose(logfile);
	       close(posfd);
       };

SEE ALSO
       strfunc(3).

AUTHORS
       Lev Walkin <vlm@lionet.info>

FreeBSD	Ports 14.quarterly     December	4, 2000			    sf_file(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=initFILEpos&sektion=3&manpath=FreeBSD+Ports+14.3.quarterly>

home | help