- 论坛徽章:
- 0
|
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h> //字符串控制定义
- #include <fcntl.h> //文件控制定义
- #include <sys/mman.h> //mmap
- int main(int argc, char **argv)
- {
- int iFd=0;
- unsigned char *pMap=NULL;
- unsigned char *p=NULL;
- unsigned long dwFileBytes=16338;
- unsigned long i;
- unsigned char ucResult=0;
-
- iFd=open("./temp123.tmp", O_CREAT|O_RDWR);
- if (iFd<=0)
- {
- printf("Open file failed\n");
- ucResult=1;
- goto End;
- }
- printf("1111111\n");
- pMap=mmap(NULL, dwFileBytes, PROT_READ|PROT_WRITE, MAP_SHARED, iFd, 0);
- if (!pMap)
- {
- ucResult=2;
- goto End;
- }
- printf("pMap=%p\n",pMap);
- for(p=pMap,i=0; i<5; i++)
- *p++=0;
-
- printf("2222222\n");
- End:
- if (!pMap)
- munmap(pMap, dwFileBytes);
- if (iFd>0)
- close(iFd);
-
- return ucResult;
- }
复制代码 编了一个简单的测试代码,发现每次运行到printf("pMap=%p\n",pMap);之后就出现“总线错误”,试过映射已存在文件,就无此问题,分析了下,好像mmap映射新建文件并不会按照映射大小来扩充文件大小,即上面例子中pMap指向的内存实际为空,那若像实现此功能应该如何操作呢? |
|