#include #include #include #define READBUFSIZE 128 /* Copy a file a few bytes at a time */ /* Inefficient compared to reading/writing larger blocks */ /* of data, but illustrates many stdio functions. */ int main(int argc, char **argv) { FILE *fin, *fout; char readbuf[READBUFSIZE]; size_t readlen; // Take the filenames from command line arguments if (argc != 3) { fprintf(stderr, "usage: ./cp_example infile outfile\n"); return EXIT_FAILURE; } // Open the input file fin = fopen(argv[1], "rb"); // "rb" --> read, binary mode if (fin == NULL) { fprintf(stderr, "%s -- ", argv[1]); perror("fopen for read failed"); return EXIT_FAILURE; } // Open the output file fout = fopen(argv[2], "wb"); // "wb" --> truncate & write, binary mode if (fout == NULL) { fprintf(stderr, "%s -- ", argv[2]); perror("fopen for write failed"); return EXIT_FAILURE; } // Read from the file, write to fout. while ((readlen = fread(readbuf, 1, READBUFSIZE, fin)) > 0) { if (fwrite(readbuf, 1, readlen, fout) < readlen) { perror("fwrite failed"); return EXIT_FAILURE; } } // Test to see if we encountered an error while reading. if (ferror(fin)) { perror("fread failed"); return EXIT_FAILURE; } fclose(fin); fclose(fout); return EXIT_SUCCESS; }