Bonjour,
J'ai une sortie différente selon que je compile sous environnement 32 bits ou sous environnement 64 bits.
Soit la fonction suivante :
Le fichier créé porte le nom G500. J'y inscrit le numéro du PID et un numéro d'équipe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 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); } }
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é.
Partager