#include "stdio.h"
#include "sys/types.h"
#include "sys/stat.h"
#include "fcntl.h"
#include "sys/mman.h"
#include "unistd.h"
#include "string.h"
typedef struct {
int id; //mark: byte alignment
char sex; //mark: no bool in C
char age;
char partment[20];
} Emp;
int main(int arc, char* arv){
printf("Hello Mmap\n");
printf("od -A x -t x1c a.txt\n");
int size = sizeof(Emp) * 2;
int fd = open("a.txt", O_CREAT | O_RDWR | O_TRUNC, 0666);
//open file with O_TRUNC, the file's size is truncated to 0
//if the file's size is 0, although mmap() can be successfully returned, the bus error occurs when manipulate buffer
//if the file is exist and size is right, when open the file with O_APPEND and not change the file's size, there is no bus error
ftruncate(fd, size);//set the file's size
//lseek(fd, size, SEEK_SET); write(fd, "", 1);//this line can also set the file's size
Emp *pEmp;
pEmp = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);//must be MAP_SHARED for write
pEmp[0].id = 110;
pEmp[0].sex = 0;
pEmp[0].age = 20;
strcpy(pEmp[0].partment, "develop");
pEmp[1].id = 119;
pEmp[1].sex = 1;
pEmp[1].age = 21;
strncpy(pEmp[1].partment, "sell", 20);
return 0;
}