Bonjour à tous !
J'ai un soucis dans le cadre d'un portage d'une appli 32 bits en 64, en C, sur un AIX 5.3.
Le problème se situe au niveau d'un appel à shmat qui renvoie un pointeur nul. Ce qui est bizarre c'est que l'appel à shmat passe bien (i.e. il ne renvoie pas -1), et qui cela passe sans problème en 32 bits.
La mémoire est bien crée et je la vois bien en faisant un ipcs -m.
J'ai changé la clé par rapport à la version 32 bits, histoire d'être sûr de taper sur quelque chose de vierge, et avant chaque exécution je vérifie que tout va bien avec ipcs -m, quitte à supprimer les zones mémoire non supprimées du au plantage de l'essai précédent.
Bon, voila le bout de code qui ne va pas !
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
/* la création */
MemSize = size;
/* Essai de création de mémoire partagée associée à 'key' */
if ((MemId = shmget(key, WRAPPER_MemSize, IPC_CREAT | S_IRUSR | S_IWUSR)) == -1)
{
printf("[WRAPPER_CreateSharedMemory] %d %s\n", WRAPPER_MemId, trerror(errno) );
return -1;
}
printf("[WRAPPER_CreateSharedMemory] mem ok %d\n", WRAPPER_MemId);
/* la partie qui pose pb */
errno=0;
MemAddr=&resmem;
printf("MemAddr =%p\n", (void*)MemAddr);
if ( (MemAddr = (char *) shmat(WRAPPER_MemId, 0, 0)) == BAD_ADDR)
{
Trace_log((char *)"Echec de connexion à la mémoire partagée\n",1);
perror("shmat: ");
printf("[AttachSharedMemory] Mem:%p\n",(void*)MemAddr);
return NULL;
}
if (MemAddr == NULL)
{
perror("shmat");
printf("[AttachSharedMemory] SHMAT retour nul... : Mem:%x, %s\n", (void*)MemAddr, strerror(errno));
}
else
printf("[AttachSharedMemory] memoire ok\n"); |
Voila, j'ai un peu tout essayé dans les options de ces deux fonctions... Si vous avez des idées je suis preneur !

J'ai beaucoup de mal à trouver de la doc sur ce cas qui n'est pas détaillé dans le man (ou dans la doc officielle IBM d'ailleurs).
Merci d'avance !
Partager