什么情况下,文件打开(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);
}