#define _GNU_SOURCE #define _LARGEFILE_SOURCE #define _LARGEFILE64_SOURCE #define _FILE_OFFSET_BITS 64 #include #include #include #include #include #define BUFSIZE (1024*1024) char b[2][BUFSIZE] __attribute__((aligned(4096))); long long ident=0,diff=0; static inline void llformat(char * buf, long long v) { int i; long long ti; if (v<0) { *(buf++)='-'; v=-v; } for (i=ti=1;ti*10<=v;ti*=10,i++); while (i) { *(buf++)=(v/ti)+'0'; v=v%ti; ti/=10; if (i%3==1) *(buf++)=' '; --i; } buf[-1]=0; } static inline void print() { char b1[30],b2[30],b3[30]; // printf("\x0D%lld %lld %lld ",ident+diff,ident,diff); llformat(b1,ident+diff); llformat(b2,ident); llformat(b3,diff); printf("\x0D%s - %s - %s ",b1,b2,b3); fflush(stdout); } static inline void range(int n) { int i; for (i=0;i \n",argv[0]); return 1; } for (i=0;i<2;++i) { if (*argv[i+1]) fd[i]=open(argv[i+1],O_RDONLY); else fd[i]=0; if (fd[i]==-1) { perror(argv[i+1]); return 1; } } while (1) { for (i=0;i<2;++i) { int rr; r[i]=0; do { int req=BUFSIZE-r[i]; if(req>4096) req=4096; rr=read(fd[i],b[i]+r[i],req); if (rr==-1) { perror(argv[i+1]); return 1; } r[i]+=rr; } while ((rr)&&(r[i]