Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.
nombre réponses : 2

#0 -1 »  Instructions dans un processus » Le 27/01/2013, à 00:27

sin92
Réponses : 3

Bonjour voila y'a quelque chose que je n'arrive pas a comprendre je débute dans la programmation système :

voici mon code : il s'agit simplement de faire communiquer un processus père avec un processus fils

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void pipe_shell(char* argv1, char* argv2);

int main(int argc,char* argv[])
{
        if(argc!=3)
                 exit(-1);

	pipe_shell(argv[1],argv[2]);
		
	return EXIT_SUCCESS;
}

void pipe_shell(char* argv1, char* argv2)
{
	int tube[2];
	pipe(tube);
	pid_t result_fork=fork();

	switch(result_fork)
	{
		case -1 : printf("Erreur creation processus\n");
			exit(-1);

		case 0 : /*processus fils*/
                        printf("coucou");
			close(tube[1]);
			dup2(tube[0],0);
			close(tube[0]);
			execl("/usr/bin/sort","sort",NULL);
			break;

		default : /*processus pere*/
			printf("coucou");
			close(tube[0]);
			dup2(tube[1],1);
			close(tube[1]);
			execl("/bin/ls","ls",NULL);

	}
}

Pourquoi les printf("coucou"); ne s'exécutent pas?

De plus si j'ai bien compris les processus sont tués dès que leurs instructions sont terminés mais admettons que le fils doit envoyer un message au père via un pipe; Admettons que ce soit au père de s'exécuter en premier il va terminer ses instructions, voyant qu'il n'y a rien à lire pour le moment et ne pourra pas lire ce que le fils lui envoie puis va mourir? mais dans la réalité les deux arrivent à communiquer donc quand un processus meurt-il réellement?Tourne t-il en boucle plusieurs fois de suite?Ou lors de l'accès en lecture d'un descripteur va t-il se mettre en pause jusqu'a ce qu'une donnée apparaisse?

Merci !

#1 Re : -1 »  Instructions dans un processus » Le 28/01/2013, à 14:32

sin92
Réponses : 3

Merci beaucoup de ta réponse melrock si je commente la ligne du execl, le printf s'affiche normalement et comme le printf arrive avant le execl je me demandais le rapport de cause à effet.

Ok faut que je regarde toute cette histoire de blocage alors tongue

Dernière petite question : dans tous les cours "propres" que j'ai pu voir, il y a ces lignes :

close(tube[0]);
dup2(tube[1],1);
close(tube[1]);

La première, aucun souci on ferme le coté du tube qu'on utilise pas dans le processus.
La deuxième no souci non plus, on connecte les flux.
Mais la troisième : pourquoi ferme t'on le descripteur crée via un pipe si on doit l'utiliser par la suite?Ici, on connecte l'entrée du tube a la sortie standard mais pourquoi ferme t-on l'entrée du tube juste après?

Merci encore.