#include #include #include #include #include static int usage(const char *prog) { fprintf(stderr, "Usage: %s [-l] [-0] <# of times>\n", prog); return 1; } int main(int argc, char **argv) { extern int optind; /* next argument to process */ extern char *optarg; /* pointer to argument parameter */ int flag; while ((flag = getopt(argc, argv, "0l")) != EOF) { switch (flag) { case '0': setvbuf(stdout, NULL, _IONBF, 0); break; case 'l': setlinebuf(stdout); break; default: return usage(*argv); } } if (argc-optind != 2) return usage(*argv); { char s[strlen(argv[optind])+2]; int c = atoi(argv[optind+1]); int i; signal(SIGPIPE, SIG_IGN); strcpy(s, argv[optind]); strcat(s, "\n"); for (i = 1; i <= c; i++) { size_t rc; if ((rc = fwrite(s, 1, sizeof(s)-1, stdout)) != sizeof(s)-1) { fprintf(stderr, "%d. fwrite returned %zu instead of %zu\n", i, rc, sizeof(s)-1); return 1; } else fprintf(stderr, "%d. fwrite wrote %zu bytes and ferror is %d\n", i, rc, ferror(stdout)); } } return 0; }