mmapを利用して、効率良くファイルをコピー。通常ファイルが標準入力にリダイレクトされていることを想定。
#include < sys/mman.h >
#include < sys/types.h >
#include < unistd.h >
#include < stdio.h >
int main(){
off_t p, file_size;
size_t pagesize, len;
char *mp;
pagesize = getpagesize();
if ((file_size = lseek(0, 0, SEEK_END))<0){
perror("lseek");
return 1;
}
len = pagesize;
for(p = 0; p < file_size; p += len){
if (file_size - p < pagesize){
len = file_size - p;
}
if ((mp = mmap(0, len, PROT_READ,MAP_PRIVATE, 0, p))== MAP_FAILED){
perror("mmap");
return 1;
}
write(1, mp, len);
if (munmap(mp, len)< 0){
perror("munmap");
return 1;
}
}
return 0;
}