IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Flux d'entrée et de sortie


Sujet :

C

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 45
    Points : 34
    Points
    34
    Par défaut Flux d'entrée et de sortie
    Bonjour,

    J'ai une méthode qui s'appelle yylex(); que je ne peux pas modifier mais que je peux l'appeler. Elle ne prend aucun argument et ne renvoie rien. Je ne comprend pas trop le code de cette méthode. Mais, elle attend sur son entrée standard à l'infini une chaîne de caractère pour la transformer en une autre chaîne de caractère, puis elle affiche sur sa sortie standard la nouvelle chaine grâce à un fputs(chaine, stdout).

    J'aimerais pouvoir lui envoyer une chaine de caractère et récupérer la nouvelle chaine dans mon code C.

    Pour cela, j'ai fait appelle aux pipe() et au fork().
    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
    int main(int argc,char * argv[])
    {
    	int bufsiz = 256;
    	int pfdchildparent[2];
    	int pfdparentchild[2];
     
    	pipe(pfdchildparent);
    	pipe(pfdparentchild);
     
    	int  pid = fork();
     
    	char * buffer = malloc(bufsiz * sizeof(char));
     
    	if (pid == 0)
    	{//père
    		close(pfdchildparent[0]);
     
    		close(pfdparentchild[1]);
    		dup2(pfdparentchild[0], 0);
    		close(pfdparentchild[0]); /* close the pipe */
     
    		write(pfdchildparent[1], "chaine de caractère\n", strlen("chaine de caractère\n"));
    		close(pfdchildparent[1]);
     
    		while (read(0, buffer, bufsiz) != 0)
    			printf("pere reads %s", buffer);
     
    		close(1);
    		close(0);
    	}
    	else
    	{ //fils
    		close(pfdchildparent[1]);
    		dup2(pfdchildparent[0], 0);
    		close(pfdchildparent[0]);
     
    		close(pfdparentchild[0]);
    		dup2(pfdparentchild[1], 1);
    		close(pfdparentchild[1]);
     
    		yylex();
     
    		close(1);
    		close(0);
    	}
     
    	return 0;
    }
    Mais, cela ne fonctionne pas. Rien ne s'affiche

    Est ce que fputs("chaine", stdout); et write(0, "chaine", strlen("chaine")); font exactement la même chose ?!
    car la méthode yylex() utilise stdin et stdout. Je ne sais pas ce que c'est car elles ne sont pas initialiser dans le code. Mais j'ai supposé que stdin = 1 et stdout = 0 ...

    Normalement, si j'ai bien compris, que l'on fasse un printf ou un write(1, ...). Cela devrait mettre la chaine sur la sortie standard c'est à dire sur l'écran ?

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur UNIFACE, C, C++, C#, Java
    Inscrit en
    Janvier 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur UNIFACE, C, C++, C#, Java
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 71
    Points : 47
    Points
    47
    Par défaut
    Bonjour,
    A tu le code de la fonction yylex() ?


    pour ta question concernant fputs et write :

    La fonction fputs rend une valeur non négative si l'écriture se passe sans erreur, et EOF en cas d'erreur.

    fputs écrit sur le fichier le contenu du tableau dont la fin est indiquée par un caractère null. Le tableau de caractères peut contenir ou non un line-feed. fputs peut donc servir indifféremment à écrire une ligne ou une chaîne quelconque.


    La commande read permet de lire des données et la commande write permet de les écrire.
    Le programme met ces commandes en situation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    main()
    {
    char buf[10];
     
    	while (1) {
    		int cc;
     
    		cc = read (0, buf, sizeof(buf));
    		write (1, buf, cc);
    	}
    }
    L'appel système read retourne le nombre de caractères lus. Ce nombre est donné à write pour écrire uniquement le nombre de caractères effectivement lus.

    voilà pour les différences.


    A quel moment envoie tu ta chaine de caractères ?

    Cordialement

    Dylan.

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 45
    Points : 34
    Points
    34
    Par défaut
    Merci, pour ta réponse.

    Mais, j'ai trouvé le problème.

    Mon code fonctionne très bien.

    C'est juste que je n'avais pas inclu la bonne bibliothèque de lex. Merci

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur UNIFACE, C, C++, C#, Java
    Inscrit en
    Janvier 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur UNIFACE, C, C++, C#, Java
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2012
    Messages : 71
    Points : 47
    Points
    47
    Par défaut
    Pas de soucis,
    Bonne continuation à toi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Runtime] Shell et flux d'entrée sortie
    Par Adrael dans le forum API standards et tierces
    Réponses: 11
    Dernier message: 02/05/2014, 17h14
  2. Livre sur les flux d'entrée/sortie
    Par oodini dans le forum Livres
    Réponses: 3
    Dernier message: 04/04/2014, 17h41
  3. Réponses: 0
    Dernier message: 24/04/2012, 21h30
  4. Flux d'entrée/sortie par référence.
    Par max_batteur_fou dans le forum C++
    Réponses: 3
    Dernier message: 13/01/2011, 23h54
  5. Envoi d'un flux audio entre 2 PC
    Par TheDarkLewis dans le forum Windows
    Réponses: 2
    Dernier message: 30/08/2004, 02h02

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