Buffchan input is interpreted as a set of lines. Each line contains a fixed number of initial fields, followed by a variable number of filename fields. All fields in a line are separated by whitespace. The default number of initial fields is one; the ``-f'' flag may be used to specify a different number of fields. See filechan(8) for an example.
After the initial fields, each remaining field names a file to write. The ``-s'' flag may be used to specify a format string that maps the field to a file name. This is a sprintf(3) format string which should have a single ``%s'' parameter which will be given the field. The default value is /news/spool/news/out.going/%s. See the description of this flag in filechan(8). The ``-d'' flag may be used to specify a directory the program should change to before starting. If this flag is used, then the default for the ``-s'' flag is changed to be a simple ``%s.''
Once buffchan opens a file it keeps it open. The input must therefore never specify more files than can the number of available descriptors can keep open. If the ``-b'' flag is used, the program will allocate a buffer and attach it to the file using setbuf(3). If the ``-u'' flag is used, the program will request unbuffered output.
If the ``-l'' flag is used with a number n, then buffchan will call fflush(3) after every n lines are written to a file. If the ``-c'' flag is used with a number n, then buffchan will close, and re-open, a file after every n lines are written to a file.
If the ``-L'' flag is used with a number n, then all files will be flushed every n seconds. Similarly, the ``-C'' flag may be used to specify that all files should be closed and re-opened every n seconds.
By default, the program sets its standard error to /news/news/log/errlog. To suppress this redirection, use the ``-r'' flag.
If the ``-p'' flag is used, the program will write a line containing its process ID (in text) to the specified file.
Buffchan can be invoked as an exploder feed (see newsfeeds(5)). As such, if a line starts with an exclamation point it will be treated as a command. There are three commands, described below:
drop The ``drop'' command is similar to the ``flush'' command except that any files are not re-opened. If given an argument, then the specified site is dropped, otherwise all sites are dropped. (Note that the site will be restarted if the input stream mentions the site.) When a ctlinnd ``drop site'' command is sent, innd will automatically forward the command to buffchan if the site is a funnel that feeds into this exploder. To drop all sites, use the ctlinnd ``send buffchan-site drop'' command.