O_DIRECT读写出错
nmzrl 2006-08-31 09:16:59 我用/dev/mem的mmap得到一段内存,然后通过O_DIRECT方式读一个文件的内容,可是老出现错误:Bad address,请问这是怎么回事,有何解决办法呀
另外:如果内存是从上层直接申请(malloc(length)),就没问题
解化代码如下:
int main()
{
int length = 4096;
if((fd = open("/dev/mem",O_RDWR,S_IRUSR | S_IWUSR)) != -1)
{
v = mmap(0, length, PROT_READ | PROT_WRITE, MAP_SHARED,fd,400M);
//v = malloc(length)/*直接申请*/
if ( (int)v == -1)
{
exit(1);
}
} else exit(1);
memset(v,'a', length);
int m_fd = open("a", O_CREAT | O_RDWR | O_DIRECT);
if(!m_fd)exit(1);
int pagesize=getpagesize();/*页对其*/
char* alignedbuff=(char*)((((int unsigned)v+pagesize-1)/pagesize)*pagesize);
int ret = write(m_fd, alignedbuff, length);
if (ret != length)
printf("Error at write(): %s\n",strerror(errno));
return 0;
}