#define _POSIX_C_SOURCE 200809L #include #include #include int main(int argc, char *argv[]) { FILE * current_input_file; int i; char c; int using_unbuffered_output; int error_occurred; for(i = 1; i < argc; i++) { if(argv[i][0] == '-') { if(argv[i][1] == 'u') { using_unbuffered_output = 1; i = argc; } } } if(argc == 1) { current_input_file = stdin; for(c = fgetc(current_input_file); c != EOF; c = fgetc(current_input_file)) { if(using_unbuffered_output) { write(1, &c, 1); } else { fprintf(stdout, "%c", c); } } fclose(current_input_file); } for(i = 1; i < argc; i++) { if(argv[i][0] == '-' && argv[i][1] == '\0') { current_input_file = stdin; } else if(argv[i][0] == '-' && argv[i][1] == 'u' && argv[i][2] == '\0') { if(argc > 2) { continue; } else { current_input_file = stdin; } } else { current_input_file = fopen(argv[i], "r"); if(current_input_file == NULL) { fprintf(stderr, "%s: %s: No such file or directory\n", argv[0], argv[i]); error_occurred = 1; } } for(c = fgetc(current_input_file); c != EOF; c = fgetc(current_input_file)) { if(using_unbuffered_output) { write(1, &c, 1); } else { fprintf(stdout, "%c", c); } } fclose(current_input_file); } if(error_occurred) { return 1; } else { return 0; } }