Comment lire et écrire avec mmap() sur un système Linux

J'ai besoin de faire certains flux dans et hors classes à l'aide de mmap() sous Linux. Pour ce faire, j'ai essayé de faire quelques test de code qui écrit des nombres entiers dans un fichier, enregistre, il se charge encore et écrire les données dans le fichier de cout. Si ce test de code fonctionne, Il ne sera pas un problème de flux et de sortir par la suite.

Quand j'ai commencé j'ai eu segment de fautes et Si je ne comprends pas que rien ne s'est passé, alors j'ai googlé un peu. J'ai trouvé ce livre http://www.advancedlinuxprogramming.com/alp-folder/alp-ch05-ipc.pdf où autour de la page 107 il y a quelques utile de code. J'ai copier collé le code et fait quelques petits changements et a obtenu ce code:

int fd;
void* file_memory;

/* Prepare a file large enough to hold an unsigned integer.  */
fd = open ("mapTester", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);

//Make the file big enough
lseek (fd, 4 * 10 + 1, SEEK_SET);
write (fd, "", 1);
lseek (fd, 0, SEEK_SET);

/* Create the memory mapping.  */
file_memory = mmap (0, 4 * 10, PROT_WRITE, MAP_SHARED, fd, 0);
close (fd);

/* Write a random integer to memory-mapped area.  */
sprintf((char*) file_memory, "%d\n", 22);

/* Release the memory (unnecessary because the program exits).  */
munmap (file_memory, 4 * 10);

cout << "Mark" << endl;

//Start the part where I read from the file

int integer;

/* Open the file.  */
fd = open (argv[1], O_RDWR, S_IRUSR | S_IWUSR);

/* Create the memory mapping.  */
file_memory = mmap (0, 4 * 10, PROT_READ | PROT_WRITE,
MAP_SHARED, fd, 0);
close (fd);

/* Read the integer, print it out, and double it.  */
scanf ((char *) file_memory, "%d", &integer);
printf ("value: %d\n", integer);
sprintf ((char*) file_memory, "%d\n", 2 * integer);

/* Release the memory (unnecessary because the program exits).  */
munmap (file_memory, 4 * 10);

Mais je reçois un segment fults après la "marque" de cout.

Puis-je remplacer le "lire la suite" avec ceci:

fd = open("mapTester", O_RDONLY);

int* buffer = (int*) malloc (4*10);

read(fd, buffer, 4 * 10);

for(int i = 0; i < 1; i++)
{
    cout << buffer[i] << endl;
}

Qui est un peu de code de travail qui m'indique que le fichier est vide. Je tente un couple de façons d'écrire à la cartographie sans aucun changement dans le résultat.

Alors, comment suis-je introductif de faire mon code à écrire?
Et mon mmap lire le code semble correct (juste au cas où vous pouvez voir quelques défauts évidents)?

J'ai trouvé quelques autres ressources qui ne m'aide pas, mais parce que je suis un nouvel utilisateur je ne peut poster max 2 liens.

OriginalL'auteur RobbingDaHood | 2012-02-13