#include <stdio.h> #include <time.h> #include <fcntl.h> #include <unistd.h> #include <stdlib.h> int main(int argc, char** argv){ if (argc<5){printf("Please add input file and three output files to command line arguments\n");exit(1);} int run=1; // How many times to copy the input file for each test int bufsz=5; char array[bufsz]; int b=0; int i; time_t unbuf_s,unbuf_e,buf1_s,buf1_e,buf2_s,buf2_e; FILE * read_f; FILE * write_f; //Unbuffered IO printf("Unbuffered\n"); int read_fd=open(argv[1],O_RDONLY); int write_fd=open(argv[2],O_WRONLY | O_CREAT); unbuf_s=time(NULL); for(i=0; i<run; i++){ do{ b=read(read_fd, array, bufsz); write(write_fd, array, b); }while (b>0); lseek(read_fd, 0, SEEK_SET); } unbuf_e=time(NULL); close(read_fd); close(write_fd); //Buffered IO with flushing printf("Buffered with flushing\n"); read_f = fopen(argv[1],"r"); write_f = fopen(argv[3],"w"); buf1_s=time(NULL); for(i=0; i<run; i++){ do{ b=fread(array, 1, bufsz-1, read_f); array[b]='\0'; fwrite(array, 1, b, write_f); fflush(write_f); }while(!feof(read_f)); fseek(read_f,0,SEEK_SET); } buf1_e=time(NULL); fclose(read_f); fclose(write_f); //Buffered IO without flushing printf("Buffered without flushing\n"); read_f = fopen(argv[1],"r"); write_f = fopen(argv[4],"w"); buf2_s=time(NULL); for(i=0; i<run; i++){ do{ b=fread(array, 1, bufsz-1, read_f); array[b]='\0'; fwrite(array, 1, b, write_f); }while(!feof(read_f)); fseek(read_f,0,SEEK_SET); } buf2_e=time(NULL); printf("DONE\n"); fclose(read_f); fclose(write_f); printf("Time for Unbuffered:\t\t%d sec\nTime for Buffered with flush:\t%d sec\nTime for Buffered w/o flush:\t%d sec\n", unbuf_e - unbuf_s, buf1_e - buf1_s, buf2_e - buf2_s); return 0; }