O_DIRECT读写出错

nmzrl 2006-08-30 05:59:30
我用/dev/mem的mmap得到一段内存,然后通过O_DIRECT方式读一个文件的内容,可是老出现错误:Bad address,请问这是怎么回事,有何解决办法呀
解化代码如下:
int main()
{
if((fd = open("/dev/mem",O_RDWR,S_IRUSR | S_IWUSR)) != -1)
{
v = mmap(0, length, PROT_READ | PROT_WRITE, MAP_SHARED,fd,400M);
if ( (int)v == -1)
{
exit(1);
}
} else exit(1);
memset(v,'a', length);
int m_fd = open("a", O_CREAT | O_RDWR | O_DIRECT);
/*m_fd判断*/
int pagesize=getpagesize();/*页对其*/
char* alignedbuff=(char*)((((int unsigned)v+pagesize-1)/pagesize)*pagesize);
int ret = write(m_fd, alignedbuff, 4096);
if (ret != 4096)
printf("Error at write(): %s\n",strerror(errno));
return 0;
}
...全文
293 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
nmzrl 2006-08-31
  • 打赏
  • 举报
回复
如果内存是从上层申请的,则没问题:
将v = mmap(0, length, PROT_READ | PROT_WRITE, MAP_SHARED,fd,400M);改为:
v = malloc(length);
哦length就是下面的4096

nmzrl 2006-08-31
  • 打赏
  • 举报
回复
就是判断是否打开
if(m_fd == -1) {
...
exit(1);
}
nmzrl 2006-08-31
  • 打赏
  • 举报
回复
就没人给指点一下吗?
哪怕是给提个建议
yjf7888 2006-08-30
  • 打赏
  • 举报
回复
/*m_fd判断*/的代码呢?

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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