mmap映射

teamade 2016-12-20 07:00:30
#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;
}


在21行中以只O_WRONLY的方式打开程序报错,而已O_RDWR方式打开则没问题,请问是什么原因?
...全文
218 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你没有读的权限啊

23,110

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧