Précédent   Forum du club des développeurs et IT Pro > C et C++ > C > Débuter
Débuter Forum d'entraide pour débuter en langage C. Avant de poster -> FAQ C
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 26/02/2013, 18h45   #1
stoner
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : décembre 2012
Messages : 37
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2012
Messages : 37
Points : 30
Points : 30
Par défaut Communication par tubes

Bonjour à tous,

je tente de faire un programme qui crée deux fils. Le premier fils demanderait 2 nombres à l'utilisateur puis le second fils calculerait R = n1 * n2.


Voici mon code:

Code :
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
int tube[2];  //Les consignes m'obligent à déclarer en global...
int tube2[2];
 
void fctfils1(void)
{
	int nombre[2];
	printf("Insérez le premier nombre:");
	scanf("%d",&nombre[0]);
	printf("Insérez le deuxième nombre:");
	scanf("%d",&nombre[1]);
	close(tube[0]); 	                               
	write(tube[1],nombre,sizeof(nombre));          
	exit(0);
}
 
void fctfils2(void)
{
	int receptionNb[2];                  
	close(tube[1]);                         			 
	read(tube[0],receptionNb,sizeof(receptionNb));
	printf("le fils recoit: %d et %d\n", receptionNb[0], receptionNb[1]);
	int multi = receptionNb[0] * receptionNb[1];
 
	close(tube2[0]);
	write(tube2[1],multi,sizeof(multi));
	exit(0);
}
 
 
void fctpere(void)
{
	int multi;                  
	close(tube2[1]);                         	
	read(tube2[0],multi,sizeof(multi));
	printf("le père recoit: %d\n", multi); 				
	wait(0);
	wait(0);
	exit(0);
}
 
int main (int argc, char * argv[])
{
 
    if (((pipe(tube))<0) | ((pipe(tube2))<0)) exit(1);	
 
    pid_t pid = 1;
 
	if ((pid = fork()) < 0) exit(1);					
	if (pid == 0) fctfils1();				
 
	else{
		if ((pid = fork()) < 0) exit(1);				
		if (pid == 0) fctfils2();
		else fctpere();		
		}
 
}
J'obtiens un résultat extravagant...

Voici mes erreurs :
  • tube.c:34: warning: passing arg 2 of `write' makes pointer from integer without a cast
  • tube.c:43: warning: passing arg 2 of `read' makes pointer from integer without a cast

Aussi je ne parviens pas à utiliser un type double pour ma variable multi sans provoquer les erreurs:
  • tube.c:32: error: incompatible type for argument 2 of `write'
  • tube.c:41: error: incompatible type for argument 2 of `read'

Un immense merci pour votre aide...
stoner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2013, 19h06   #2
Kirilenko
Membre émérite
 
Avatar de Kirilenko
 
Homme Lucas Pesenti
Étudiant
Inscription : décembre 2011
Messages : 234
Détails du profil
Informations personnelles :
Nom : Homme Lucas Pesenti
Âge : 16
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2011
Messages : 234
Points : 859
Points : 859
Envoyer un message via MSN à Kirilenko
Bonsoir,

Les fonctions read et write attendent toutes deux des (const) void *, c'est-à-dire des pointeurs sur tes données. En passant &multi et &nombre, par exemple, à tes fonctions, cela fonctionne correctement.

Bonne soirée !
__________________
Récursivité en C : épidémie ou hérésie ?

"Pour être un saint dans l'Église de l'Emacs, il faut vivre une vie pure. Il faut se passer de tout logiciel propriétaire. Heureusement, être célibataire n'est pas obligé. C'est donc bien mieux que les autres églises" - Richard Stallman
Kirilenko est actuellement connecté   Envoyer un message privé Réponse avec citation 40
Vieux 26/02/2013, 21h58   #3
stoner
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : décembre 2012
Messages : 37
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2012
Messages : 37
Points : 30
Points : 30
Merci Kirilenko !

Bonne soirée et merci encore.
stoner est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 22h15.


 
 
 
 
Partenaires

Hébergement Web