内存文件映射的问题

xengine-qyt 2013-03-26 04:50:14


#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>



int main(int argc, char *argv[])
{
int fd;
off_t length;
char *addr;
char *inserted = "awdawdasdadw啊我大王的哇啊伟大我的哇awdawdawdasdawdadafdaw124234\n"; // this str will be inserted to the file

fd = open("abc.txt", O_RDWR | O_CREAT, 0644);

length = lseek(fd,0,SEEK_END);
addr = (char *)mmap(NULL,4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
for (int i = 0;i < 30;i++)
{
memcpy(addr + length, inserted, strlen(inserted));
length += strlen(inserted) + 1;
}
//printf("addr: %s", addr);

munmap((void *)addr, length);
close(fd);
}



为什么 length = lseek(fd,0,SEEK_END); 的返回值不正确? 我创建的空白文件
memcpy(addr + length, inserted, strlen(inserted)); 这里怎么崩溃了呐?
...全文
104 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
gfchen1989 2013-03-27
  • 打赏
  • 举报
回复
mmap并不分配空间,这种办法是不能增加文件长度的,这里的第二个参数只是表示映射区的长度,只有该长度小于文件长度才有意义。 当文件是空的话,对文件映射区进行操作就是相当于非法内存读写,报总线错误。
xengine-qyt 2013-03-26
  • 打赏
  • 举报
回复
大哥 运行下不就知道了 完全看不明白啊。调试也不懂为啥
gfchen1989 2013-03-26
  • 打赏
  • 举报
回复
偶也不知道,求解,什么错误啊。

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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