使用mmap求助
mmap使用时报错,invalid argument, 如果把MAP_SHARED 换成 MAP_PRIVATE就可以了,这是为什么?
/* Created by Anjuta version 1.2.4a */
/* This file will not be overwritten */
#include <stdio.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
int main()
{
int fdes;
void* mapaddr = NULL;
struct stat stat;
size_t length = 0;
int pagesize = 0;
int remaining = 0;
fdes = open("./main.c", O_RDWR, 0);
if(fdes < 0){
perror("open file errorn");
return -1;
}
if(fstat(fdes, &stat) < 0){
perror("fstat errorn");
return -1;
}
length = stat.st_size;
pagesize = getpagesize();
remaining = length % pagesize;
if(remaining != 0)
{
length = length + pagesize - remaining;
}
mapaddr = mmap(NULL, length, PROT_READ|PROT_WRITE, MAP_PRIVATE, fdes, 0);
if(mapaddr == (void*)(-1)){
if(errno == EINVAL)
fprintf(stderr, "invalid argumentsn");
perror("mmap error");
return -1;
}
if(write(1, mapaddr, stat.st_size) < 0)
{
perror("write error ");
}
return (0);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
http://www.cublog.cn/opera/showart.php?blogid=117&id=55391 看看这个就明白了