Quel est le problème avec ce comportement de “stdin”?

Je testais le fonctionnement de l’appel de système «sondage». Mais pendant que je faisais cela, je fais face à un comportement peu clair. Prenons l’exemple facile suivant:

#include  #include  #include  #include  #include  int main() { pollfd p[2]; p[0].fd = STDIN_FILENO; p[0].events = POLLIN; p[1].fd = STDOUT_FILENO; p[1].events = POLLOUT; char *str_to_write = "Hello world!"; write(STDIN_FILENO, str_to_write, strlen(str_to_write)); const int NUMBER_OF_DESCRIPTORS = 2; const int DELAY = 5; int rt = poll(p, NUMBER_OF_DESCRIPTORS, DELAY * 1000); if (rt == -1) { printf("Some error was occurred! %d", errno); return errno; } if (rt == 0) { printf("Timeout was occurred! None of the events are ready =( "); return 0; } if (p[0].revents & POLLIN) { printf("stdin was ready =)"); } if (p[1].revents & POLLOUT) { printf("stdout was ready =)"); } return 0; } 

Comme nous pouvons le voir, je vais attendre un stream d’entrée standard jusqu’à ce qu’il soit prêt à être lu:

  p[0].fd = STDIN_FILENO; p[0].events = POLLIN; 

C’est pourquoi j’ai décidé d’écrire quelque chose par la méthode “write”:

 write(STDIN_FILENO, str_to_write, strlen(str_to_write)); 

Pourriez-vous s’il vous plaît clarifier les questions suivantes:
1) Pourquoi mon idée d’écrire quelque chose sur ‘STDIN’ et de recevoir un événement nous indiquant que ‘STDIN’ est prêt à être lu ne fonctionne pas?
2) Quand je ne lance pas le programme en mode debug, il y a toujours le message “Bonjour tout le monde” à l’écran (en sortie de mon programme sauf le message que stdout était prêt) mais quand je le lance dans le debug mode il n’y a pas ce message. Qu’est ce que ça pourrait être? Comment se fait-il que cette information écrite dans “STDIN” apparaisse alors directement dans “STDOUT”?

Merci d’avance