Comment demander l'avis sans avoir besoin d'appuyer sur RET - Clavier Interrompre en C, Linux OS
-
27-10-2019 - |
Question
J'ai lu beaucoup de choses sur ce qui im ??demander, mais la chose la plus proche que j'ai trouvé est en utilisant la bibliothèque ncurses. Que faire im est un simple client http qui Monitory certains dossiers à distance pour vérifier si ses fichiers ont changé ou si de nouveaux fichiers. En outre, il doit vérifier stdin pour certaines commandes, donc, je prévois sur l'utilisation du processus de père processus monitory stdin et travailleur à Monitory les répertoires distants. Je voudrais utiliser quelque chose comme interruption du clavier. Quelque chose comme l'installation d'un gestionnaire de signal clavier pressurage, afin que l'utilisateur n'a pas à appuyer sur Entrée après chaque commande.
Jusqu'à présent, ncurses fait ce que j'ai besoin, mais je ne peux pas imprimer des choses sur la sortie standard, mais plutôt dans stdscr. Le problème est que ce projet est une mission pour le collège, et il est très susceptible d'être vérifié par un script qui a lu stdout ...
du programme mi, des suggestions?
le morceau de code correspondant est le suivant:
#include <ncurses.h>
initscr(); /* Start curses mode */
raw(); /* Line buffering disabled */
noecho(); /* Don't echo() while we do getch */
char key;
while (TRUE) {
key = getch();
switch(key)
{
case 's':
printw("Instrucción recibida: STOP\n");
printf("Hasta Luego!\n");
fflush(stdout);
/*NOTICE THIS HAS NO EFFECT, */
refresh();
sleep(2);
endwin(); /* End curses mode */
fflush(stdout);
exit(0);
break;
case 'c':
printw("Instrucción recibida: CONTINUE\n");
refresh();
break;
case 'p':
printw("Instrucción recibida: PAUSE\n");
refresh();
break;
default:
printw("Instrucción desconocida recibida: %c\n",key);
refresh();
}
}
endwin(); /* End curses mode */
quand je lance mon programme, si je rediriger la sortie vers un fichier, je reçois un fichier vide
$ verific -d http://url.toMy.directory/ > output
$ cat output
$
Merci pour votre aide !!! =)
La solution
Ce fut étonnamment difficile à trouver et je ne suis toujours pas satisfait du résultat: Vous pouvez utiliser stty()
pour passer en mode brut. On évite ainsi (n) malédictions et toute altération stdout
.
A partir d'un script shell, vous utiliseriez stty raw
( explication plus ).
Cette réponse contient le code C: caractères de capture de l'entrée standard sans attendre entrer à presser
Ne pas oublier de restaurer avant de quitter ou de votre terminal comportent impair paramètres de l'ATS. Je suggère d'envelopper votre code dans un script shell qui contient trap "stty sane" EXIT
près du début. Ce sera toujours exécuter stty sane
lorsque le script se termine.