日期:2014-05-16  浏览次数:20670 次

linux 内存文件映射的问题
mmap 映射一个文件到内存,我在写满这个内存的时候回写文件,现在想清楚这个文件的所有内容,应该怎么做?
还有就是创建内存文件映射后,我回写的文件都是文本内容,我回写完毕关闭后,打开这个文件发现如果没写满 这个文件后面会跟上一段\0\0啥的乱起把着的数据,怎么处理?



if (-1 == (hFile = open(lpszFileName,O_RDWR | O_CREAT,S_IRUSR | S_IWUSR)))
    {
        return FALSE;
    }

    int nPageSize = nSize % 4;
    nSize -= nPageSize;
    if (-1 == lseek(hFile,nSize,SEEK_SET))
    {
        return FALSE;
    }
   
    if (-1 == write(hFile,_T(""),1))            //这里 ,删除后没法使用,没法把内容回写到文件
    {
        return FALSE;
    }
    ptszMemAddr = (TCHAR *)mmap(NULL,nSize,PROT_READ | PROT_WRITE,MAP_SHARED,hFile,0);    
    if (NULL == ptszMemAddr)
    {
        return FALSE;
    }


------解决方案--------------------
文件你要清空,读写是做不到的,你用truncate函数。
你写入的时候一定要指定好长度,不然的话,一不小心就不\0写进去了。