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

POSIX C Discussion :

[Linux]comment intercepter le stdin ?


Sujet :

POSIX C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 16
    Par défaut [Linux]comment intercepter le stdin ?
    Bonjour

    J' ai besoin d'intercepter le stdin dans mon programme d'un processus fils
    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    pid_t pid = fork();
    if (pid == 0)
     { 
    .....
    ....
    execvp("tr","a-z","A-Z");  //commande unix pour convertir une chaine en Maj
    }
    else if (pid == 1) {
    wait(&staus)
    .....
    .... comment recupere l'entré passé a la commande tr dans le terminal ???
    }
    je veux récupérer le text taper a la commande "tr" pour l'utliser plus tard dans le processus Pere sans blocké le stdin??

    Merci

  2. #2
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Ton utilisation de fork() est erronée, on l'utilise comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    pid_t pid = fork();
     
    if(pid == -1)
    {
       /* error */
    }
    else if(pid == 0)
    {
       /* son */
    }
    else
    {
       /* father : pid = son's pid */
    }
    cordialement

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Si tu veux capturer ce que l'utilisateur envoie à la commande tr, la seule solution est de lire toi-même (dans le process père) stdin, puis de passer les données lues au process fils (tr) via un pipe connecté au stdin de de tr. Tu auras besoin de pipe() (avant le fork) et de dup2() (dans le process fils, entre le fork et le exec).

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 16
    Par défaut
    Citation Envoyé par matafan Voir le message
    Si tu veux capturer ce que l'utilisateur envoie à la commande tr, la seule solution est de lire toi-même (dans le process père) stdin, puis de passer les données lues au process fils (tr) via un pipe connecté au stdin de de tr. Tu auras besoin de pipe() (avant le fork) et de dup2() (dans le process fils, entre le fork et le exec).
    Je comprend ce que vous voulez dire...et tous mes fork() et pipe() son bien configurer....
    mais, admettons que je veut passer plusieurs texte a la commande "tr" jusqu'a la fermeture de stdin (^D)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $ tr a-z A-Z
    hello       <-
    HELLO     
    bonjour    <-
    BONJOUR
    pomme    <-
    POMME
    ^D
    $
    ici le process pere recupere : hello,bonjour , pomme.
    j'ai vue dans des forum qu'ils parlent du poll(). mais je comprend pas comment l'utiliser.....

  5. #5
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    Tout ça n'est pas très clair...
    Commence par nous expliquer ce que tu souhaites réaliser, sans parler de programmation, ensuite on verra s'il y a vraiment de besoin de spawner un nouveau processus et de faire aussi compliqué.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 16
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Tout ça n'est pas très clair...
    Commence par nous expliquer ce que tu souhaites réaliser, sans parler de programmation, ensuite on verra s'il y a vraiment de besoin de spawner un nouveau processus et de faire aussi compliqué.
    j'ai besoin permettre a l'utilisateur de passer la commande "tr" a mon programme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $monprogramme tr a-z A-Z
    et par la suite mon programme doit intercepter tous les mots taper dans la commande "tr" par l'utilisateur et les afficher par la suite.

Discussions similaires

  1. [Linux] comment installer GLUT
    Par Mathieu.J dans le forum GLUT
    Réponses: 5
    Dernier message: 28/09/2012, 17h39
  2. [oracle9i-Linux] Comment vider un UNDO tablespace
    Par Loïck dans le forum Oracle
    Réponses: 8
    Dernier message: 03/12/2009, 13h53
  3. Réponses: 7
    Dernier message: 27/06/2005, 22h05
  4. Réponses: 4
    Dernier message: 26/06/2005, 23h28

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