mmap,memcpy将文件从A复制到B
我正在尝试使用MMAP和MEMCPY将文件从a复制到B。下面的代码正是这样做的,但是当我使用CMP比较块时,它说“mem_copy.c dest不同:字节1,第1行,我不知道为什么mmap,memcpy将文件从A复制到B,c,C,我正在尝试使用MMAP和MEMCPY将文件从a复制到B。下面的代码正是这样做的,但是当我使用CMP比较块时,它说“mem_copy.c dest不同:字节1,第1行,我不知道为什么 int main(int argc, char **argv){ int sfd, dfd; char *src, *dest; struct stat s; /* SOURCE */ sfd = open("hello.c", O_RDONLY); fstat(s
int main(int argc, char **argv){
int sfd, dfd;
char *src, *dest;
struct stat s;
/* SOURCE */
sfd = open("hello.c", O_RDONLY);
fstat(sfd, &s); // st_size = blocksize
printf("%d\n", (int)s.st_size);
src = mmap(NULL, s.st_size, PROT_READ, MAP_PRIVATE, sfd, 0);
/* DESTINATION */
dfd = open("dest", O_RDWR | O_CREAT, 0666);
ftruncate(dfd, s.st_size;
dest = mmap(NULL, s.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, dfd, 0);
/* COPY */
memcpy(dest, src, s.st_size);
munmap(src, s.st_size);
munmap(dest, s.st_size);
close(sfd);
close(dfd);
return 0;
}
明白了
int main(int argc, char **argv){
int sfd, dfd;
char *src, *dest;
size_t filesize;
/* SOURCE */
sfd = open("hello.c", O_RDONLY);
filesize = lseek(sfd, 0, SEEK_END);
src = mmap(NULL, filesize, PROT_READ, MAP_PRIVATE, sfd, 0);
/* DESTINATION */
dfd = open("dest", O_RDWR | O_CREAT, 0666);
ftruncate(dfd, filesize);
dest = mmap(NULL, filesize, PROT_READ | PROT_WRITE, MAP_SHARED, dfd, 0);
/* COPY */
memcpy(dest, src, filesize);
munmap(src, filesize);
munmap(dest, filesize);
close(sfd);
close(dfd);
return 0;
}
这不可能是您的代码。有一个明显的语法错误。另外,
size\u t
可以很容易地用格式打印%zu
。您能分享完整的代码列表,包括失败的比较吗?抱歉,伙计们,这是完整的代码。您想说,改变获取文件大小的方式解决了这个问题吗?