int main() {
int fd; // File Descriptor for the integer file
int pagesize=getpagesize(); // To store the size of virtual page
printf("\nPage size is %d bytes.\n100 integers require %lu bytes\n",pagesize,100*sizeof(int));
void *data; // This is the pointer which will store the returned pointer when mmap() is called
fd=open("integer", O_RDWR);
data=mmap((caddr_t)0, pagesize, PROT_WRITE | PROT_READ, MAP_SHARED, fd,0);
close(fd);
sprintf((char*)data,"%d",100);
return 0;
}
这将返回分段错误11
答案 0 :(得分:2)
您应该检查来自open
和mmap
的错误。此外,编译警告并包含必要的包含文件。 mmap
特别需要在许多系统上使用正确的原型,因为它的off_t参数在你传递0作为最后一个参数时会破坏它。
但这还不够。文件是否存在且非零大小? mmap
可以愉快地将页面映射到文件末尾之外,但访问这些页面会导致错误。如果您确实希望将数据写入文件,则需要确保它足够长。请使用ftruncate
。
另外,我想知道你找到你的文档的哪个博物馆,如果它提到caddr_t
作为mmap
的第一个参数,但是除此之外,如果编译它也应该有效。