Discussion: Probleme de pipe

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    mars 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : mars 2017
    Messages : 2
    Points : 1
    Points
    1

    Par défaut Probleme de pipe

    Bonsoir je suis nouveau dans la programmation système, je suis entrain de tester les pipes j'ai un soucis avec le code ci-dessous
    Quand je test cette commande "/bin/cat" avec un paramètre pas de soucis le code s’exécute normalement mais quand je test sans paramètre j'ai une erreur de type : Input/output error
    quelqu'un peut t'il m’éclairer ?

    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
     
     
    int main(int argc, char **argv, char **ev)
    {
    	pid_t		pid;
    	int			fd[2];
     
    	char	*cmd[2] = {"/bin/cat", NULL};
    	pipe(fd);
    	pid = fork();
    	if (pid == 0)
    	{
    		close(fd[0]);
    		dup2(fd[1], 1);
    		close(fd[1]);
    		execve(cmd[0], cmd, NULL);
    	}
    	else
    	{
    		close(fd[1]);
    		dup2(fd[0], 0);
    		close(fd[0]);
    	}
    	return 0;
    }
    merci d'avance rsokar

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    21 532
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 21 532
    Points : 143 877
    Points
    143 877
    Billets dans le blog
    5

    Par défaut

    Bonjour,

    /bin/cat sans argument lit dans l'entrée standard. Toutefois, l'entrée standard n'est pas disponible dans votre fork. Du coup, /bin/car fait une erreur lorsqu'il essaie d'y lire.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    mars 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : mars 2017
    Messages : 2
    Points : 1
    Points
    1

    Par défaut

    Merci de votre aide , mais j'avais compris ce matin pourquoi j'avais cette erreur , mais il y a un truc que je pige toujours pas c'est pour enchainer les commandes
    J'ai fais un test en dur et ca correspond bien a ce que on peut retrouver dans le shell !
    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
     
    int main(int argc, const char *argv[])
    {
    	char	*cmd1[] = {"/bin/cat", NULL};
    	char	*cmd2[] = {"/bin/cat", NULL};
    	char	*cmd3[] = {"/bin/ls", NULL};
    	int	p1[2];
    	int	p2[2];
     
    	pipe(p1);
    	if (fork() == 0)
    	{
    		close(p1[0]);
    		dup2(p1[1], 1);
    		execve(cmd1[0], cmd1, NULL);
    		exit(0);
    	}
    	pipe(p2);
    	if (fork() == 0)
    	{
    		close(p1[1]);
    		dup2(p1[0], 0);
    		close(p2[0]);
    		dup2(p2[1], 1);
    		execve(cmd2[0], cmd2, NULL);
    		exit(0);
    	}
    	close(p1[0]);
    	close(p1[1]);
    	if (fork() == 0)
    	{
    		close(p2[1]);
    		dup2(p2[0], 0);
    		execve(cmd3[0], cmd3, NULL);
    		exit(0);
    	}
    	close(p2[0]);
    	close(p2[1]);
     
    	while (wait(NULL) != -1)
    		;
    	printf("END OF PROGRAM\n");
    	return 0;
    }
    Mais un problem ce pose , je ne vois pas comment faire une boucle avec un nombre indéterminé de commandes, quelqu'un pourrai t'il m'éclairer sur la manière de procéder

    rsokar

Discussions similaires

  1. Mini-shell probleme avec pipe
    Par Appsolu dans le forum C
    Réponses: 11
    Dernier message: 13/08/2011, 01h07
  2. probleme de pipe + fork
    Par jerem721 dans le forum C
    Réponses: 0
    Dernier message: 12/02/2011, 23h48
  3. Probleme de pipe et de process pere-fils sous Windows
    Par Ipone dans le forum Threads & Processus
    Réponses: 3
    Dernier message: 14/04/2010, 13h52
  4. Probleme comprehension pipe
    Par kuroro20 dans le forum POSIX
    Réponses: 6
    Dernier message: 13/03/2009, 22h01
  5. [THREAD] probleme de pipe
    Par mehdiyassin dans le forum APIs
    Réponses: 5
    Dernier message: 01/07/2004, 14h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo