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 :

Lire l'entrée standard de façon non bloquante ou limitée dans le temps


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 17
    Points
    17
    Par défaut Lire l'entrée standard de façon non bloquante ou limitée dans le temps
    Bonjour à tous,

    J'ai un petit problème en C. J'aimerais lire l'entrée standard, de manière à récupérer un charactère, afin de déclencher des événements (menu classique jusque là).

    Cependant, suite à une construction un peu particulière, je dois effectuer cette lecture de manière non bloquante, ou à défaut, pendant un intervalle de temps limité.

    En effet, dans mon programme, j'ai 2 façons de terminer celui ci :
    - recevoir une terminaison locale
    - recevoir un événement réseau indiquant la fin du programme.

    J'ai donc essayer un fgets, mais celui ci bloque le programme tant qu'il n'a pas reçu d'entrée. (Ce qui pose problème, car cela empêche de recevoir des éléments du réseau.)

    J'ai essayé de faire un thread, mais mon thread s'est mis en attente de caractères ... et a oublié de se réveiller quand j'ai tapé sur entrée

    Vu que je suis complètement rouillé en C, je suis un peu à la masse.

    L'objectif est donc de pouvoir permettre à cette boucle d'écouter soit :
    - pjsip_endpt_handle_events(g_endpt, &timeout);
    - stdin, de manière à recevoir un caractère.

    Est ce que quelqu'un aurait une idée ?

    (L'idéal, ce serait un truc portable, mais bon, c'est pas encore noël je crois)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    for (;!g_complete;) {
    		pj_time_val timeout = {0, 10};
    		pjsip_endpt_handle_events(g_endpt, &timeout);
    		char option[10];
    		puts("Press 'h' to hangup during communication or 'q' to quit");
    		fgets(option, sizeof(option), stdin);
     
     
    		if (option[0] == 'q') {
    			break;
    		}
                    ...
    }
    Merci pour votre aide,

    Museum

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Il n'y a rien de portable, et c'est PITA sous Windows à cause d'un bug au niveau de la gestion des consoles.

    À une époque, j'avais triché en faisant un ReadConsole() sur un handle dupliqué (avec DuplicateHandle()) vers l'entrée standard, et je fermais ce handle dupliqué dans un autre thread.
    ReadConsole() retournait une erreur ERROR_INVALID_HANDLE, et je reprenais l'exécution.

    Mais cela dépend entièrement de comportements non-documentés et n'est pas garanti marcher sur toutes les versions de Windows.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    C'est bien ce que je craignais.

    Bon, je vais donc enterrer la portabilité et me rappeler comment on capture les signaux de la commande kill.

    Et un deuxieme process s'occupera de les envoyer

    Merci pour tout.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Euh, en POSIX, tu peux essayer la fonction alarm() pour commencer: Elle envoie un signal SIGALRM quand le temps est écoulé...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    à vrai dire, envoyer les signaux n'est pas le problème. Un petit script bash et la commande kill sont là pour ca.

    Non, ce qu'il faut que je retrouve, c'est comment les capturer.

    Mais bon, google est là pour moi

    Merci pour tout

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

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Pour le coup, un select() couplé à l'entrée standard passé en mode asynchrone me paraît plus approprié.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

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

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par Museum Voir le message
    à vrai dire, envoyer les signaux n'est pas le problème. Un petit script bash et la commande kill sont là pour ca.

    Non, ce qu'il faut que je retrouve, c'est comment les capturer.

    Mais bon, google est là pour moi

    Merci pour tout
    sigaction() est fait pour, mais je préfère de loin la méthode select().
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    La méthode select() ?

    J'ai croisé plusieurs fois des références à celle ci, mais j'ai pas compris comment ca marche.

    Depuis : man select, j'ai compris qu'on lui passe stdin (enfin 0, son descripteur de fichier), et qu'avec les paramètres qu'il faut, on peut lire en asynchrone, mais je vois pas comment faire.

    Est ce que tu pourras donner un lien ou cette méthode est décrite ?

    Merci beaucoup

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

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    On passe à la programmation POSIX, quel est ton architecture, ton système, compilateur, libc? quel niveau de portabilité dois tu avoir?
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    C'est vrai, sous POSIX, select() marche sur stdin. Pas besoin de passer en asynchrone, il suffit de ne lire que si select() a dit qu'on pouvait...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    Architecture :

    pour le moment, une ubuntu i386, bientot une ARM7.

    Vu qu'on utilisera le portage debian pour ARM sur cette dernière, ca devrait pouvoir le faire.

    Bon, je vais continuer à creuser le man dans ce cas (ca a l'air plus pratique que ce que je voulais faire)

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

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    OK, personnellement, je préfère poll() à select(), et epoll() (puisque tu es sur du linux) à poll().
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    De mon coté, je n'ai pas de point de vue particulier sur ce problème. Le truc, c'est que j'ai réussi à faire quelque chose avec select.

    Bon, c'est pas encore définitif (doit y avoir un truc que j'ai mal capté) puisque dans le bout de code suivant, j'arrive plus à lire stdin, bien que je détecte l'entrée :

    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
     
    puts("Press 'h' to hangup during communication or 'q' to quit");
    	for (;!g_complete;) {
    		pj_time_val timeout = {0, 10};
    		pjsip_endpt_handle_events(g_endpt, &timeout);
    		char option[10];
    		struct timeval tv;
    		fd_set readfds;
     
    		tv.tv_sec = 2;
    		tv.tv_usec = 500000;
     
    		FD_ZERO(&readfds);
    		FD_SET(STDIN, &readfds);
     
    		// don't care about writefds and exceptfds:
    		select(STDIN+1, &readfds, NULL, NULL, &tv);
     
    		if (FD_ISSET(STDIN, &readfds)) {
    			printf("A key was pressed!\n");
     
    			fgets(option, sizeof(option), stdin);
    			if (option[0] == 'q') 
                               break;
                    }
              }
    //Fin du programme
    Faut il que j'utilise directement la directive read pour réussir à lire mon stdin après le select ?

    --EDIT --

    Une petite vérification de mon code m'a montré que j'ai écrit une connerie, ce qui faisait que je restais dans ma boucle malgré le fait que j'ai bien reçu le caractère de fin.

    Merci à tous.

    Pour ceux qui sont intéressé par select, voilà la source que j'ai utilisé comme base :

    beej.us/guide/bgnet/examples/select.c

    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
     
    /*
    ** select.c -- a select() demo
    */
     
    #include <stdio.h>
    #include <sys/time.h>
    #include <sys/types.h>
    #include <unistd.h>
     
    #define STDIN 0  // file descriptor for standard input
     
    int main(void)
    {
    	struct timeval tv;
    	fd_set readfds;
     
    	tv.tv_sec = 2;
    	tv.tv_usec = 500000;
     
    	FD_ZERO(&readfds);
    	FD_SET(STDIN, &readfds);
     
    	// don't care about writefds and exceptfds:
    	select(STDIN+1, &readfds, NULL, NULL, &tv);
     
    	if (FD_ISSET(STDIN, &readfds))
    		printf("A key was pressed!\n");
    	else
    		printf("Timed out.\n");
     
    	return 0;
    }
    Il y a un tutorial très sympa sur select là bas, je remercie l'auteur :

    http://beej.us/guide/bgnet/output/ht...ed.html#select

    Merci à tous

  14. #14
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    sous unixoide, on peut se débrouiller avec poll...

    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
     
     
    /*
     *  C h e c k s _ T o _ R e a d _ I n p u t
     *
     */
    static int  Checks_To_Read_Input ( void )
    {
       int             iret ;
       struct pollfd   fds[1] ;
     
       fds[0].events = POLLIN | POLLRDNORM ;
     
       fds[0].fd = fileno(stdin) ;
     
       /* Checks the state of the communication */
       iret = poll (fds, 1, 100 );
     
       if ( (iret <= 0) ||
    	(((! fds[0].revents & POLLIN) && (fds[0].revents & POLLRDNORM)) ||
    	 (fds[0].revents & POLLERR) || (fds[0].revents & POLLHUP)) )
           return ERROR ;
       else
           return SUCCESS ;
    }
    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
     
    /*
     * Q u e s t i o n s
     *
     */
    static int Questions()
    {
      int  rep=0, n ;
      char c, buf[3] ;
     
      fprintf (stderr, "\n\n What would you like to do :\n");
      fprintf (stderr, "\n      1 : Connect to a server          (HELLO/WELCOME)");
      fprintf (stderr, "\n     16 : Disconnect from server       (BYE)\n");
      fprintf (stderr, "\n     17 : Exit");
      fprintf (stderr, "\n\n Please enter your choice : ");
    	while ( Checks_To_Read_Input() == ERROR )
    	  {
    	  }
     
      n = 0 ;
      c = 0 ;
      while ( (c != '\n') || (c != 10) || (c != 13) )
        {
          fscanf ( stdin, "%c", &c );
          if ( (c != '\n') || (c != 10)|| (c != 13) )
    	{
    	  buf[n] = c ;
    	  n = n + 1 ;
    	  if ( n == 2 )
    	    break ;
    	}
        }
     
      if ( n == 0 )
        rep = Questions();
     
      if ( (n == 2) && ((strcmp(buf, "-h") == 0) || (strcmp(buf, "-H") == 0)) )
        {
          Display_Help();
          fscanf ( stdin, "%c", &c );
          rep = Questions();
        }
      else
          sscanf ( buf, "%d", &rep );
    .....
    }
    Si non bloquant, définir une fonction appellée qui se débrouillera le reste du temps...

    J'ai un exemple...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

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

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par Museum Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FD_SET(STDIN, &readfds);
    Citation Envoyé par souviron34 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fds[0].fd = fileno(stdin) ;
    Pour info, STDIN_FILENO est portable et standard (défini dans unistd.h).
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  16. #16
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Pour info, STDIN_FILENO est portable et standard (défini dans unistd.h).
    Pour info, Nicolas, fileno et stdin sont standard C (stdio.h).

    Je préfère avoir le code le plus standard qui soit, et limiter la non-standardisation à poll... (bien que ce soit dispo dans winsock2.h, mais pas réellement implanté).

    Quel est le mal à rester le plus basique en C lorsque c'est possible ??? unistd , comme son nom l'indique, est pour systèmes unixoides...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

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

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    Pour info, Nicolas, fileno et stdin sont standard C (stdio.h).

    Je préfère avoir le code le plus standard qui soit, et limiter la non-standardisation à poll... (bien que ce soit dispo dans winsock2.h, mais pas réellement implanté).

    Quel est le mal à rester le plus basique en C lorsque c'est possible ??? unistd , comme son nom l'indique, est pour systèmes unixoides...
    Non fileno() n'est pas standard C, le C n'a pas la notion de descripteur de fichier, c'est du POSIX. Donc ma resolution reste pertinente, portable, standard et simple.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  18. #18
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par nicolas.sitbon Voir le message
    Non fileno() n'est pas standard C, le C n'a pas la notion de descripteur de fichier, c'est du POSIX. Donc ma resolution reste pertinente, portable, standard et simple.
    K&R définition de stdio.h pas standard C ????????
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

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

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    fileno est POSIX et ne fait pas partie du C standard. Tu remarquera sans doute quand dans ton stdio.h, la déclaration de fileno est protégée par les #ifdef qui vont bien. Pour K&R je ne sais pas trop, mais de toute façon ça fait longtemps que ce n'est plus le standard.

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

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par souviron34 Voir le message
    K&R définition de stdio.h pas standard C ????????
    Non!
    Citation Envoyé par matafan Voir le message
    Pour K&R je ne sais pas trop, mais de toute façon ça fait longtemps que ce n'est plus le standard.
    Je ne l'aurais pas mieux dit.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

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

Discussions similaires

  1. Différence entre Asynchrone et modèle non bloquant
    Par unoomad dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 16/05/2014, 14h02
  2. entrée au clavier non bloquante
    Par Z20500 dans le forum Général Python
    Réponses: 3
    Dernier message: 21/07/2009, 10h34
  3. Réponses: 23
    Dernier message: 02/04/2008, 15h39
  4. Contourner le non-support de limit dans une sous-requête
    Par Christophe Charron dans le forum Requêtes
    Réponses: 7
    Dernier message: 04/09/2007, 10h45
  5. Lecture d'un pipe de façon non-bloquante
    Par Premium dans le forum POSIX
    Réponses: 6
    Dernier message: 31/05/2006, 09h02

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