[C][linux] msgget : problème d'allocation

msgget : problème d'allocation [C][linux] - C - Programmation

Marsh Posté le 14-09-2005 à 16:31:34    

bonjour,
je dois allouer 30 files de messages en utilisant msgget (impératif)
je fais donc une boucle appelant 30 fois msgget :

Code :
  1. for (ind = 0; ind < CD_NBMAXOUTIL; ind++)
  2.     {
  3.         P_taboutil[ind].cle_file_read = CD_CLEFMREAD_OUTIL + ind;
  4.         G_Tab_files[ind] = msgget (CD_CLEFMREAD_OUTIL + ind, IPC_CREAT | 0666);
  5.         if (G_Tab_files[ind] == CD_KO)
  6.     {
  7.      char c;
  8.      fprintf(stderr,"erreur dans itteration %d/n",ind);
  9.      scanf ("%c\n", &c);
  10.             C_ERREUR ("PI_READ_TRAM", 1, "S_READ_INIT", errno, "pb msgget creation file outil" );
  11.     }
  12.     }


or pour une raison inconnue cela foire à la 11ième indentation.... (key 330 -> 340)

Code :
  1. cat /proc/sysvipc/msg
  2.        key      msqid perms      cbytes       qnum lspid lrpid   uid   gid  cuid  cgid      stime      rtime      ctime
  3.        360     524288   666           0          0 12579 12576   502   502   502   502 1126707200 1126707200 1126703055
  4.        363      32769   666           0          0     0     0   502   502   502   502          0          0 1126693229
  5.        366      65538   666           0          0     0     0   502   502   502   502          0          0 1126693229
  6.        362     557059   666           0          0     0     0   502   502   502   502          0          0 1126703091
  7.        365     983044   666           0          0     0     0   502   502   502   502          0          0 1126703259
  8.        330    4620293   666           0          0     0     0   502   502   502   502          0          0 1126707382
  9.        331    4653062   666           0          0     0     0   502   502   502   502          0          0 1126707382
  10.        332    4685831   666           0          0     0     0   502   502   502   502          0          0 1126707382
  11.        333    4718600   666           0          0     0     0   502   502   502   502          0          0 1126707382
  12.        334    4751369   666           0          0     0     0   502   502   502   502          0          0 1126707382
  13.        335    4784138   666           0          0     0     0   502   502   502   502          0          0 1126707382
  14.        336    4816907   666           0          0     0     0   502   502   502   502          0          0 1126707382
  15.        337    4849676   666           0          0     0     0   502   502   502   502          0          0 1126707382
  16.        338    4882445   666           0          0     0     0   502   502   502   502          0          0 1126707382
  17.        339    4915214   666           0          0     0     0   502   502   502   502          0          0 1126707382
  18.        340    4947983   666           0          0     0     0   502   502   502   502          0          0 1126707382


 
quelqu'un connaitrais-t-il une solution? (variable /proc à changer etc....)

Reply

Marsh Posté le 14-09-2005 à 16:31:34   

Reply

Marsh Posté le 14-09-2005 à 17:11:46    

Qu'est-ce qui "foire" ? Ecrit un programme minimal mais complet qui reproduit le probleme, est poste-le ici.

Reply

Marsh Posté le 14-09-2005 à 20:31:54    

déjà il serait bien que tu respectes les notions du C. Une déclaration en plein milieu de ton code est totalement interdite en C. Faut pas mélangé le C et le C++

Reply

Marsh Posté le 14-09-2005 à 20:38:02    

moi23372 a écrit :

déjà il serait bien que tu respectes les notions du C. Une déclaration en plein milieu de ton code est totalement interdite en C. Faut pas mélangé le C et le C++


Meuh ? C'est autorisé en C99...
 
Maintenant, que ce soit une pratique souhaitable est un autre débat. (perso je suis contre, car la portée de la variable est peu claire...)
 
De plus, je ne vois pas à quoi tu fais allusion dans le code du posteur original.

Message cité 1 fois
Message édité par Emmanuel Delahaye le 14-09-2005 à 21:20:13

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 14-09-2005 à 20:49:37    

Emmanuel Delahaye a écrit :

Meuh ? C'est autorisé en C99...
 
Maintenant, que ce soit une pratique souhaitable est un autre débat. (perso je suis contre, car la portée de la variable est peu claire...)


 
tu peux discuter là dessus, maintenant, déclarer quand on initialise, je trouve ça bien meilleur. Ça évite les mauvais codes tels que
 

Code :
  1. {
  2. Foo x;
  3. /* je suis un bon programmeur, je ne laisse pas mes variables non-initialisées
  4.    quand je suis bien luné, j'utilise une vrai initialisation
  5. */
  6. x = gros_calcul();
  7. /* plein de travail */
  8. /* ah ben merde, finalement pas besoin de x, on sort */
  9. }


 
(ce qui est surtout vrai en C++, mais c'est totalement HS)
 
 
Et puis d'ailleurs, je ne vois rien de C99 ici

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed