当前位置: 技术问答>linux和unix
什么情况下,文件打开(open)成功,但映射(mmap)不成功?
来源: 互联网 发布时间:2016-01-07
本文导语: 代码大概这样: 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时文件名是:%sn", file); printf("NULL时文...
代码大概这样:
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时文件名是:%sn", file);
printf("NULL时文件内容:%sn", start);
printf("文件描述符是:%dnn", fd);
}
经常有的打印结果是:
NULL时文件名是:xxx
NULL时文件内容:(null)
文件描述符是:4
这是怎么回事?
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时文件名是:%sn", file);
printf("NULL时文件内容:%sn", start);
printf("文件描述符是:%dnn", fd);
}
经常有的打印结果是:
NULL时文件名是:xxx
NULL时文件内容:(null)
文件描述符是:4
这是怎么回事?
|
这个file是什么文件 ? 普通文件,设备文件?
如果是设备文件,那要在驱动里面实现mmap方法。
如果是设备文件,那要在驱动里面实现mmap方法。
|
#include
#include
#include
#include
#include
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);
}
#include
#include
#include
#include
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);
}