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

什么情况下,文件打开(open)成功,但映射(mmap)不成功?
代码大概这样:

int   fd;
void   *start;
struct   stat   sb;

fd   =   open(file,   O_RDONLY);
fstat(fd,   &sb);
start   =   mmap(NULL,   sb.st_size,   PROT_READ,   MAP_PRIVATE,   fd,   0);

if(   NULL   ==   start)  
{
        printf( "\nNULL时文件名是:%s\n ",   file);
        printf( "NULL时文件内容:%s\n ",   start);
        printf( "文件描述符是:%d\n\n ",   fd);
}

经常有的打印结果是:
NULL时文件名是:xxx
NULL时文件内容:(null)
文件描述符是:4

这是怎么回事?

------解决方案--------------------
这个file是什么文件 ? 普通文件,设备文件?

如果是设备文件,那要在驱动里面实现mmap方法。
------解决方案--------------------
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
main()
{
int fd;
void *start;
struct stat sb;
fd=open( "/etc/passwd ",O_RDONLY); /*打开/etc/passwd*/
fstat(fd,&sb); /*取得文件大小*/
start=mmap(NULL,sb.st_size,PROT_READ,MAP_PRIVATE,fd,0);
if(start= = MAP_FAILED) /*判断是否映射成功*/
return;
printf( "%s ",start);
munmap(start,sb.st_size); /*解除映射*/
closed(fd);
}