- 论坛徽章:
- 1
|
#include <sys/mman.h>
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
typedef struct{
char name[4];
int age;
}people;
int main(int argc, char *argv[])
{
int fd, i;
people *p_map;
char temp;
fd = open( argv[1], O_CREAT|O_RDWR|O_TRUNC, 00777);
lseek( fd, sizeof(people)*5-1, SEEK_SET);
write( fd, "", 1 );
p_map = ( people* )mmap( NULL, sizeof(people)*10, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, 0 );
close( fd );
temp = 'a';
for ( i = 0; i<10; ++i )
{
temp += 1;
memcpy( (*(p_map + i)).name, &temp, 2 );
( *(p_map + i) ).age = 20 + i;
}
printf( "initialize over \n" );
sleep( 10 );
munmap( p_map, sizeof(people)*10 );
printf( "nmap ok \n" );
return 0;
}
为什么只存储了五个结构,书上说"首先打开或创建一个文件,并把文件的长度设置为5个people结构大小.然后从mmap()的返回地址开始,设置了10个people结构."
请问是哪一句设置文件长度了,是lseek吗. 文件新创建时长度不是零吗. |
|