读书人

mmap内存映射函数报错,no such device

发布时间: 2012-05-28 17:59:33 作者: rapoo

mmap内存映射函数报错,no such device
char *start;
char *end;

sockfd=socket(AF_INET,SOCK_STREAM,0);
address.sin_family=AF_INET;
address.sin_addr.s_addr=inet_addr("127.0.0.1");
address.sin_port=htons(7999);
len=sizeof(address);
result=connect(sockfd,(struct sockaddr *)&address,len);


if((fd = open("1.zip",O_WRONLY|O_CREAT)) == -1) {
printf("Open 1.zip error:%s\n",strerror(errno));
exit(EXIT_FAILURE);
}
if(-1==(truncate("1.zip",size))) {
printf("truncate error\n");
exit(EXIT_FAILURE);
}
number=size/4096;

for(i=1;i<=((number/2)+1);i++){

start=mmap(NULL,4096,PROT_READ,MAP_PRIVATE,sockfd,0);
if( start == MAP_FAILED ){
printf("map start error %s",strerror(errno));
exit(EXIT_FAILURE);
}

end=mmap(0,4096,PROT_WRITE,MAP_SHARED,fd,0);
if( end == MAP_FAILED ){
printf("map end error");
exit(EXIT_FAILURE);
}
bzero(start,4096);
bzero(end,4096);

memcpy(end,start,4096);
munmap(start,4096);
munmap(end,4096);



用strace 跟踪到第一个start=mmp(...)的时候程序就停下来了,提示错误是找不到设备文件。
服务器我用的sendfile传到socket缓冲区,这个代码没贴出来,应该没问题。

求大牛。。。。昨晚搞到现在还是不知道原因所在。

[解决办法]
应该是不行

apue中说,Memory-mapped I/O lets us map a file on disk into a buffer in memory.

另外,socket描述符一节有一个列表,关于不同的函数针对socket描述符的行为。
对于mmap,其行为是未定义的

读书人网 >UNIXLINUX

热点推荐