Bonjour à tous,
Ne sachant pas trop où poster ça, je l'ai mis dans débuter en C (je me trompe peut-être). Venant du Java, j'ai assez peu l'habitude de programmer en C et je découvre plein de subtilitésJ'ai cherché sur le forum une réponse mais je n'ai rien trouvé (je manque sans doute de vocabulaire pour une recherche plus "fine")
Le contexte : on m'a demandé de programmer une sorte de cron en C (un peu plus intelligent car il sera capable de traiter les réponses et de réagir en conséquence...). J'ai fini mes specs, mon plan développement et mon plan qualité et je commence à coder. Je suis sous un environnement linux / ubuntu. Le code n'est pas destiné à être porté sous windows.
Mon souci : je n'arrive pas à envoyer sur l'entrée standard de mon programme un ordre. Soit je le relance, soit il ne le prends pas en compte. Si je suis dans le même terminal, je n'ai aucun souci, il me prends bien en compte ce que je tape au clavier, par contre, je n'arrive pas à lui envoyer une chaîne de caractère via un autre terminal (peut-être dois-je récupérer le PID ?), je ne sais même pas si c'est un problème en C ou un problème sous Linux. La plupart des exemples que j'ai trouvé ne tiennent pas en compte que le programme est déjà lancé et tourne en boucle...
Ma question est donc la suivante : comment faire pour envoyer une chaîne de caractère sur l'entrée standard de mon programme via une commande (sh ou C ?) quand celui-ci est lancé et est en écoute sur son entrée ?
Je vous joins mon code source trouvé en exemple :
Merci d'avance
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 #include <stdio.h> #include <stdlib.h> #include <time.h> #include <pthread.h> #include <signal.h> #define STDIN 0 // file descriptor for standard input /************************************************************************/ /* */ /* Programme principal */ /* */ /************************************************************************/ int main(void) { struct timeval tv; fd_set readfds; tv.tv_sec = 200; 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; }![]()
Partager