[SOS] mmap
anthoine.bourgeois
anthoine.bourgeois at orange.fr
Jeu 20 Nov 20:28:21 CET 2008
Bonjour à tous,
J'essaye de faire un test sous linux.
C'est un test que j'ai pris des sources de SOS
sur le filesystem dans fstest.c .
J'aimerai savoir quel est l'état
du fichier mmap.txt après le test.
Sous linux j'ai un Bus Error lors le père fait la première
lecture de la zone mappé.
Quelqu'un pourrait-il tester ou me dire pourquoi
le programme ne fonctionne pas ?
le code :
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/mman.h>
int main(int argc, void *argv[])
{
int ret;
printf("mmap test\n");
/* Basic use */
ret = creat("mmap.txt", S_IRUSR | S_IWUSR);
if (ret == 0)
printf("creat OK\n");
if (fork() == 0)
{
char *shrd;
int fd;
fd = open("mmap.txt", O_RDWR | O_CREAT,
S_IRUSR | S_IWUSR);
shrd = mmap(NULL, 4096, PROT_READ | PROT_WRITE,
MAP_SHARED, fd, 4096);
printf("shrd %p children\n", shrd);
if (shrd == (void *)-1)
printf("shrd children error\n");
sleep(2);
strncpy(shrd, "Hello3 from the child (shared mapping) !", 4096);
sleep(20);
}
else
{
char *shrd;
int fd;
sleep(1);
fd = open("mmap.txt", O_RDWR | O_CREAT,
S_IRUSR | S_IWUSR);
shrd = mmap(NULL, 4096, PROT_READ | PROT_WRITE,
MAP_SHARED, fd, 4096);
printf("shrd %p father\n", shrd);
if (shrd == (void *)-1)
printf("shrd father error\n");
//strncpy(shrd, "Garbage garbage garbage", 256);
sleep(2);
printf("Father woken up\n");
//printf("Read string from child: '%s'\n", shrd);
//if (strcmp(shrd, "Hello3 from the child (shared mapping) !") == 0)
if (shrd[0] == 'H')
printf("TEST3 OK\n");
munmap(shrd, 8192);
ret = close(fd);
if (ret == 0)
printf("close OK\n");
}
return 0;
}
Ici le test if (shrd[0] == 'H') lève un Bus Error. Pourquoi ?
Cordialement,
Anthoine
Plus d'informations sur la liste de diffusion Sos