2
J'essaie d'utiliser la mémoire partagée POSIX sur un système Linux. Mais quand j'essaye de copier des données, j'obtiens une erreur de bus. Voici le code:Erreur de bus lors de l'écriture dans la mémoire partagée
#include <fcntl.h>
#include <sys/stat.h>
#include <pthread.h>
#include <sys/mman.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
void main()
{
char *s = "a";
//<!--make file descripter-->
int fd = shm_open (s, O_CREAT | O_EXCL | O_RDWR, S_IRUSR | S_IWUSR);
if (fd == -1)
{
perror ("shm open:");
printf ("error\n");
shm_unlink (s);
exit (1);
}
//<!--memory allocation-->
char *str = (char *)mmap (NULL, 10, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if (str == MAP_FAILED)
{
perror ("mmap");
exit (1);
}
*(str + 1) = 'a';
//<!--memory deallocation-->
munmap (str, 10);
//<!--unlink shared memory-->
shm_unlink (s);
}
Qu'est-ce qui provoque le blocage?
On ne sait pas où l'erreur est. Pouvez-vous coller l'erreur? –
'main()' doit renvoyer 'int' - Je suppose que vous ne compilez pas avec' gcc -Wall'? Définissez définitivement vos rapports de diagnostic - plutôt tôt que tard! (il vous faudra probablement aussi assigner une chaîne littérale à 's') –
Aussi, ne lancez pas le résultat de' mmap() '- pour la même raison que nous ne produisons pas le résultat de' malloc() ': [Dois-je diffuser le résultat de malloc?] (Https://stackoverflow.com/q/605845/4850040). –