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 : 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);
	}
}
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é.