if(offset >= sb.st_size){
fprintf(stderr,"offset is past end if file \n");
exit(EXIT_FAILURE);
}
if(argc == 4){
length = atoi(argv[3]);
if(offset + length > sb.st_size)
length = sb.st_size - offset;
}
else{
length = sb.st_size - offset;
}
printf("\tfile size is %d\n",sb.st_size);
printf("length = %d\t, mapped memory length = %d\t, pa_offset = %d\n",length,length + offset -pa_offset, pa_offset);
addr = mmap(NULL,length + offset - pa_offset, PROT_READ|PROT_WRITE,
MAP_SHARED,fd,pa_offset);
if(addr == MAP_FAILED)
handle_error("mmap");
memcpy(addr,buf,10);
printf("check write!\n");
for(i = 0;i<10 ; i++){
printf("new mem[%d] = %c\n",i, *(addr+i));
}
printf("string test = %s\n",(char *)addr);
munmap(addr,length + offset - pa_offset);
return 0;
2. b.data
[cpp]
aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
[root@localhost tryrw]# ./mywr b.data 0 10
file size is 120
length = 10 , mapped memory length = 10 , pa_offset = 0
check write!
new mem[0] = 1
new mem[1] = 2
new mem[2] = 3
new mem[3] = 4
new mem[4] = 5
new mem[5] = 6
new mem[6] = 7
new mem[7] = 8
new mem[8] = 9
new mem[9] = a