23,110
社区成员
发帖
与我相关
我的任务
分享
#include <sys/mman.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
int main(int argc, char const *argv[])
{
if (argc < 3) {
printf("Usage: %s src dest\n", argv[0]);
exit(1);
}
int sfd = open(argv[1], O_RDONLY);
if (sfd < 0) {
printf("open %s error\n", argv[1]);
exit(1);
}
int dfd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, 0777);
if (dfd < 0) {
printf("create %s error\n", argv[2]);
exit(1);
}
long len = lseek(sfd, 0, SEEK_END);
printf("len: %ld\n", len);
char *addr1 = mmap(0, len, PROT_READ, MAP_SHARED, sfd, 0);
if (addr1 < 0) {
printf("mmap error\n");
exit(1);
}
printf("addr1: %p\n", addr1);
lseek(dfd, len - 1, SEEK_SET);
write(dfd, "0", 1);
char *addr2 = mmap(0, len, PROT_WRITE, MAP_SHARED, dfd, 0);
if (addr2 < 0) {
printf("mmap error2\n");
exit(1);
}
printf("addr2: %p\n", addr2);
memcpy(addr2, addr1, len);
munmap(addr1, 0);
munmap(addr2, 0);
close(sfd);
close(dfd);
return 0;
}