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

Administration système Discussion :

que fait vraiment la fonction read quand elle attend


Sujet :

Administration système

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 274
    Par défaut que fait vraiment la fonction read quand elle attend
    Bonjour,

    lorsque l'un des mes processus attend de recevoir un massage via la fonction read que se passe t'il ?

    je constate déja que le processus est endormi via la commande ps. Donc la fonction read possede probablement la fonction pause(). j'imagine que le noyau lui emet un signal pour lui dire qu'un nouveau message est arrivé dans la zone mémoire et le processus recupere le message, non ?

    est ce que je peux tromper mon processus en lui émettant moi meme le signal qui lui dit vas y recupere les données dans la zone mémoire ? si oui c'est quoi le signal ?

    Merci d'avance pour vos réponses

  2. #2
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 159
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 159
    Par défaut
    Salut,

    help read nous dit, à propos de cette fonction
    Citation Envoyé par help du Bash
    Lit une simple ligne depuis l'entrée standard ou depuis le descripteur de fichier FD
    si l'option « -u » est fournie. La ligne est découpée en morceaux comme des mots,
    et le premier mot est assigné au premier NOM, le deuxième mot au deuxième NOM,
    et ainsi de suite, le dernier NOM récupérant la liste des mots restants.
    Seul les caractères trouvés dans $IFS sont reconnus comme délimiteurs
    de mots

    Si aucun NOM n'est fourni, la ligne lue est stockée dans la variable REPLY.
    Partant de là, ces trois lignes toutes simples
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/bin/bash
    read
    echo $REPLY
    montrent :
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $> ./script4test.sh 
    (ici le read attend, puis appui sur <ENTREE>)
    (ligne vide)
    $> ./script4test.sh 
    toto (saisie au clavier puis <ENTREE>)
    toto
    $> ./script4test.sh 
    toto tata (saisie au clavier puis <ENTREE>)
    toto tata
    $>

    Conclusion : pour mener à bien ton idée, il va te falloir remplir le buffer du clavier des caractères qui vont bien, je sais que c'est possible mais je n'ai pas de code (en C, sans doute) sous la main.

  3. #3
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 376
    Par défaut
    Bonjour,

    Déjà est-ce la fonction read d'un shell ou l'appel système qui t’intéresse ?

    Si c'est en bash par exemple, Jipété t'a donné une piste mais tu peux aussi voir avec les autres options de read (du bash) dont l'une permet de lire n caractères. Tu peux aussi voir avec stty si c'est pour de l'entrée standard tty, histoire de rendre le read non bloquant...

    Si c'est l'appel système qui t'intéresse, c'est plus compliqué à expliquer mais pour faire simple, il passe la main au kernel qui lui rendra celle-ci à la fin du boulot. Donc sauf si tu arrives à être au même niveau que le kernel, tu ne pourras pas interrompre le read via un signal sans que celui-ci ne soit au courant (retour en erreur).

    Au delà de l'appel système read, tu as d'autres fonctions qui peuvent ajuster ou passer outre read() comme les ioctl et les fcntl.

    Bon courage.

Discussions similaires

  1. Que fait (vraiment) dtw (dynamic time warping) ?
    Par Christophe Genolini dans le forum R
    Réponses: 0
    Dernier message: 18/10/2013, 15h21
  2. Réponses: 11
    Dernier message: 14/05/2006, 15h01
  3. [Conception] Que fait ma fonction ?
    Par Tr@nkill dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 28/04/2006, 15h03
  4. STL: les map et la methode find. que fait-elle?
    Par cokmes dans le forum SL & STL
    Réponses: 6
    Dernier message: 07/11/2005, 08h31

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