Bonjour à tous,
j'ai un problème concernant les tubes fifo.

Avant de mettre le code, je vous explique ce que je veux faire:
- un processus A créé un fifo, l'ouvre en écriture et y stocke son pid.Il attend ensuite le signal USR1 pour afficher son pid et le signal,puis il quitte.
- un processus B qui ouvre le fifo en lecture, regarde le PID de A stocké dedans, et envoi à ce pid le signal USR1.

Les 2 fichiers compilent, mais ne marchent pas...
Je soupçonne les lignes d'ouverture d'être à l'origine du problème.


Process A:
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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
//Inclusion des bibliothèques.
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <fcntl.h>

// pointeur sur la fonction PtrFct
typedef void (* PtrFct)(int) ;

void traiterUSR1(int idSig) ; 

int main()
{	
	//Retour de la fonction.
	PtrFct retFct;
	
	//On crée le tube  uniquement s'il n'existe pas déjà.
	int res,leFIFO,lePID;
	res=mkfifo("leTuba.FIFO",0666);
	printf("CREATION");
	//Vérification que ça s'est bien passé.
	if (res==-1)
	{
		perror("Erreur lors de la création du fifo.");
		exit(1);
	}
	printf("Et ici ?");
	//On ouvre le FIFO en écriture seulement.
	leFIFO=open("leTuba.FIFO", O_WRONLY);
	//On teste si ça s'est bien passé.
	if (leFIFO==-1)
	{
		perror("Erreur lors de l'ouverture en écriture du FIFO.");
		exit(1);
	}
	printf("OUVERTURE\n");
	
	//On remplit le tube avec le PID du process.
	lePID=getpid();
	write(leFIFO, &lePID, sizeof(lePID)+1);
	printf("ECRITURE.\n");
	//On ferme le FIFO.
	close(leFIFO);	

	while (1)
	{
		retFct = signal(SIGUSR1,traiterUSR1);
		if (retFct == SIG_ERR)
		{
			perror("Erreur de signal.\n");
			exit(1) ;
		}

	}
	
	
}

void traiterUSR1(int idSig)
{
	
	printf("Le PID est égal à : %d \n",getpid()) ;
	printf("Le numéro de signal est: %d \n", idSig);
	exit(0);
}
Process B:
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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//Inclusion des bibliothèques.

#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
#include <fcntl.h>


int main()
{	//Ouverture du fifo.
	int leFIFO,lePID;
	char * tampon;
	printf("Ouverture");
	leFIFO=open("leTuba.FIFO",O_RDONLY);
	printf("Ca marche");
	//Vérification de l'ouverture.
	if (leFIFO==-1)
	{
		perror("Erreur lors de l'ouverture en lecture du FIFO.");
		exit(1);
	}
	//On recherche ensuit le PID du process à killer.
	lePID=read(leFIFO, tampon, sizeof(int));
	//Appel à la fonction kill et test si c'est correct.
	if (kill(lePID,10)==0)
	{
	}
	else
	{
		//Si la commande a échoué.
		printf("Probleme d'envoi de signal.\n");
	}

}
Merci de m'aider si vous voyez d'où vient le problème !

Fate_B