fiss

Friedel's Initialization and Service Supervision
Log | Files | Refs | LICENSE

bcat.c (748B)


      1 #include "bio.h"
      2 
      3 #include <fmt.h>
      4 
      5 Biobuf bout;
      6 
      7 void bcat(Biobuf* b, char* name) {
      8 	char buf[1000];
      9 	int  n;
     10 
     11 	while ((n = Bread(b, buf, sizeof buf)) > 0) {
     12 		if (Bwrite(&bout, buf, n) < 0)
     13 			fprint(2, "writing during %s: %r\n", name);
     14 	}
     15 	if (n < 0)
     16 		fprint(2, "reading %s: %r\n", name);
     17 }
     18 
     19 int main(int argc, char** argv) {
     20 	int    i;
     21 	Biobuf b, *bp;
     22 	Fmt    fmt;
     23 
     24 	Binit(&bout, 1, O_WRONLY);
     25 	Bfmtinit(&fmt, &bout);
     26 	fmtprint(&fmt, "hello, world\n");
     27 	Bfmtflush(&fmt);
     28 
     29 	if (argc == 1) {
     30 		Binit(&b, 0, O_RDONLY);
     31 		bcat(&b, "<stdin>");
     32 	} else {
     33 		for (i = 1; i < argc; i++) {
     34 			if ((bp = Bopen(argv[i], O_RDONLY)) == 0) {
     35 				fprint(2, "Bopen %s: %r\n", argv[i]);
     36 				continue;
     37 			}
     38 			bcat(bp, argv[i]);
     39 			Bterm(bp);
     40 		}
     41 	}
     42 	exit(0);
     43 }