Stdio buffer flushing
    Leslie Mikesell 
    les at chinet.chi.il.us
       
    Fri Jul  6 08:00:09 AEST 1990
    
    
  
Does the putc macro have any strange side effects (such as flushing
an unfilled buffer) under SysV when setbuf is used?  I'm seeing
occasional lines in a logfile that should be:
    line1
    line2
       become:
    line1line2
    blank_line
The relevant code is:  (from smail 3.1, incidentally...)
static char logbuf[BUFSIZ]; /* stdio buffer to avoid mallocs */
fd = open(log_fn, O_CREAT|O_APPEND|O_WRONLY, log_mode);
logfile = fdopen(fd, "a");
(void) setbuf(logfile, logbuf);	/* associate stream and buffer */
	...
(void)vfprintf(logfile, fmt, ap);
putc('\n', logfile);	/* log messages don't come with \n */
(void)fflush(logfile);
Apparently the putc is performing a flush *before* adding the \n, so
that a concurrent process can write it's entry first.  Is this a
bug or are you not supposed to mix different forms of buffered output?
Les Mikesell
  les at chinet.chi.il.us
    
    
More information about the Comp.unix.questions
mailing list