sneakz | Bonjour, J'ai une sortie différente selon que je compile sous environnement 32 bits ou sous environnement 64 bits.
Soit la fonction suivante :
Code :
- void write(char *file, int team)
- {
- int fd;
- char* buffer = (char*)malloc(sizeof(char)*256) ;
- memset(buffer,0,256) ;
- if ((fd = open(file, O_WRONLY | O_CREAT | O_TRUNC, 0744)) == -1) {
- fprintf (stderr, "Erreur en ouverture.\n" ) ;
- exit(0) ;
- }
- else
- {
- printf("PID :%d Equipe :%d\n", getpid(), team);
- snprintf (buffer, sizeof(buffer)+1,"%d\n%d\n", getpid(), team);
- printf("Buffer : %s Sizeofbuffer : %d\n", buffer, sizeof(buffer)+1);
- write(fd, buffer, strlen(buffer));
- free(buffer) ;
- close (fd) ;
- printf("Ecriture réussie sur le fichier %s\n", file);
- }
- }
|
Le fichier créé porte le nom G500. J'y inscrit le numéro du PID et un numéro d'équipe.
Sous 32 bits, la sortie est la suivante :
PID :7931 Equipe :22
Buffer : 7931 Sizeofbuffer : 5
Ecriture réussie sur le fichier /tmp/G500
$ cat /tmp/F0678
7931ubuntu@ubuntu~/Projet$ La compilation se passe sans erreur mais la taille du buffer ne permet pas d'écrire les 2 données. Seule la taille du PID est inscrite dans le fichier.
Sous 64 bits, la sortie est la suivante :
Buffer : 19624
22 Sizeofbuffer : 9
Ecriture réussie sur le fichier /tmp/F0255$ cat /tmp/F0255
19624
22ubuntu@ubuntu~/Projet$ La compilation génère cette erreur sur la ligne : snprintf (buffer...
attention : format ‘%d’ expects type ‘int’, but argument 3 has type ‘long unsigned int’
Merci pour vos contributions et votre regard éclairé. Message édité par sneakz le 07-05-2009 à 19:15:14
|