Contenu | Rechercher | Menus

Annonce

Ubuntu-fr.org recrute toujours de nouveaux modérateurs, avec de l'expérience.

Ubuntu 16.04 LTS
Commandez vos DVD et clés USB Ubuntu-fr !

Si vous avez des soucis pour rester connecté, déconnectez vous et reconnectez vous depuis ce lien en cochant le case
Me connecter automatiquement lors de mes prochaines visites.

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.