/* * how to use dyngets * * this program is just like cat(1) but copies line by line, not character by character * * Matt Bishop, ECS 36A * * May 14, 2024: original version */ #include <stdio.h> #include <string.h> /* * forward declatations */ char *dyngets(char *, int, FILE *); /* get a line of "unlimited" length */ /* * dumps the contents of a file to the standard output * prefixed by line number and length */ void filedump(FILE *f) { char *in; /* points to input buffer from dyngets */ int lineno = 0; /* current line number */ /* loop through the file printing a line at a time */ /* prefix each by line number and length */ while((in = dyngets(NULL, 20, f)) != NULL){ lineno += 1; /* one more line */ /* print line number, length, and line (note newline is preserved) */ printf("%4d(%3d): %s", i, (int)strlen(in), in); } } /* *the main program */ int main(int argc, char *argv[]) { int i; /* counter in a for loop */ FILE *fp; /* points to input file */ /* * no options; process command line files one by one */ for(i = 1; i < argc; i++){ /* open the file; tally number of errors on error */ if ((fp = fopen(argv[i], "r")) != NULL){ /* it lives -- dump it and close it */ filedump(fp); fclose(fp); } else{ /* can't read it -- give file name and why */ perror(argv[i]); } } /* th-th-that's all, folks! */ return(0); }
|
ECS 36A, Programming & Problem Solving Version of April 2, 2024 at 12:13PM
|
You can get the raw source code here. |