From 992b45e6133540306200a00676ed0e6bc0c67f66 Mon Sep 17 00:00:00 2001 From: Benjamin Harris Date: Sun, 2 Oct 2016 16:21:02 -0400 Subject: [PATCH] done --- mmapcp | Bin 8895 -> 9001 bytes mmapcp.cc | 58 +++++++++++++++--------------------------------------- out.txt | Bin 10 -> 10 bytes 3 files changed, 16 insertions(+), 42 deletions(-) diff --git a/mmapcp b/mmapcp index 281795a5de8ebaca9844ee98c8164ccd8e098bd8..4d2067a66ef85b0399e4d6e6c4451422ed5a473e 100644 GIT binary patch delta 2687 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 Nc&X #include -int main(int argc, char *argv[]) -{ +int main (int argc, char *argv[]) { int s, s2, d; - struct stat st; - struct stat s2t; + struct stat st, s2t; void *sp, *s2p, *dp; s = open(argv[1], O_RDONLY); - if (s == -1) { - perror("open source"); - exit(1); - } + if (s == -1) { perror("open source"); exit(1); } s2 = open(argv[2], O_RDONLY); - if (s2 == -1) { - perror("open source2"); - exit(1); - } - d = open(argv[3], O_RDWR | O_CREAT | O_TRUNC, 0644); - if (d == -1) { - perror("open destination"); - exit(1); - } - if (fstat(s, &st)) { - perror("stat source"); - exit(1); - } - if (fstat(s2, &s2t)) { - perror("stat source2"); - exit(1); - } - if (ftruncate(d, st.st_size + s2t.st_size)) { - perror("truncate destination"); - exit(1); - } + if (s2 == -1) { perror("open source2"); exit(1); } + d = open(argv[3], O_WRONLY | O_CREAT, 0644); + if (d == -1) { perror("open destination"); exit(1); } + if (fstat(s, &st)) { perror("stat source"); exit(1); } + if (fstat(s2, &s2t)) { perror("stat source2"); exit(1); } + if (ftruncate(d, st.st_size + s2t.st_size)) { perror("truncate destination"); exit(1); } sp = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, s, 0); - if (sp == MAP_FAILED) { - perror("map source"); - exit(1); - } + if (sp == MAP_FAILED) { perror("map source"); exit(1); } + madvise(sp, st.st_size, MADV_SEQUENTIAL); s2p = mmap(NULL, s2t.st_size, PROT_READ, MAP_SHARED, s2, 0); - if (s2p == MAP_FAILED) { - perror("map source2"); - exit(1); - } + if (s2p == MAP_FAILED) { perror("map source2"); exit(1); } + madvise(s2p, s2t.st_size, MADV_SEQUENTIAL); dp = mmap(NULL, st.st_size + s2t.st_size, PROT_WRITE | PROT_READ, MAP_SHARED, d, 0); - if (dp == MAP_FAILED) { - perror("map destination"); - exit(1); - } - memcpy(dp, sp, st.st_size); + if (dp == MAP_FAILED) { perror("map destination"); exit(1); } + madvise(dp, st.st_size + s2t.st_size, MADV_SEQUENTIAL); + memcpy(mempcpy(dp, sp, st.st_size), s2p, s2t.st_size); return 0; } diff --git a/out.txt b/out.txt index 41141251b9b419f9072cab217a88ba0efc56f6d0..97461a3426e5e660eef7538aea341ffd9d5dc944 100644 GIT binary patch literal 10 Pcmd0;%+1d&Edmk%7%v21 literal 10 Ocmd0;%+1eb0096Ii~=wK