filters

Charles Bryant ch at dce.ie
Tue Dec 4 22:34:03 AEST 1990


In article <1990Dec4.105612.14422 at dce.ie> I write:
> See <1990Dec4.103255.14195 at dce.ie> in alt.sources.

Well I have just found out that our news feed has a problem with
alt.sources so rather than disappoint all you eager readers who can't
live without a new cat, here's the said feline:


To use this you will need:
	read(2), write(2), open(2), close(2), exit(2)
----------------------------------------------------------------
/* cat.c - the infamous cat(1) without bell and whistles */
#include <fcntl.h>
	/* for O_RDONLY */
#include <stdio.h>
	/* for BUFSIZ only */
#define error(s) write(2, (s), sizeof(s)-1)
#define fileerr(msg, fil) (error(msg), perror(fil), status=1)

int status=0;	/* exit status */

static void cat(fd, nam)
int fd;
char *nam;
{
 for (;;)
	{
	 char iobuff[BUFSIZ];
	 register numin;
	 numin = read(fd, iobuff, sizeof(iobuff));
	 if (numin==0) return;
	 if (numin < 0)
		{
		 fileerr("Read error: ", nam);
		 return;
		}
	 {
	  register written;
	  for (written=0; written<numin;)
		{
		 register i = write(1, iobuff+written, numin-written);
		 if (i<0)
			{
			 fileerr("Write error writing ", nam);
			 exit(1);
			}
		 written += i;
		}
	 }
	}
}

int main(argc,argv)
char **argv;
int argc;
{
 int i;
 if (argc==1)
	{
	 cat(0, "<stdin>");
	 exit(status);
	}
 for (i=1; i<argc; i++)
	{
	 int fd=open(argv[i], O_RDONLY);
	 if (fd<0)
		{
		 fileerr("Can't open ", argv[i]);
		 continue;
		}
	 cat(fd, argv[i]);
	 if (close(fd)) fileerr("Error closing input file: ", argv[i]);
	}
 if (close(1)) fileerr("Error closing output: ","<stdout>");
 exit(status);
}
-- 
Charles Bryant (ch at dce.ie)
--
/usr/ch/.signature: Block device required
-- 
Charles Bryant (ch at dce.ie)
--
/usr/ch/.signature: Block device required



More information about the Comp.unix.programmer mailing list