PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : GNU Readline Prompt auf STDERR?



rfk
26-03-2008, 08:50
Gibt es eine Möglichkeit, die Eingabeaufforderung 'readline("prompt: ")' der GNU Readline Bibliothek auf STDERR auszugeben anstatt auf STDOUT? Konnte dazu leider nichts in der Doku finden. Oder kann man (temporär) STDOUT auf STDERR umbiegen? Danke!

BLUESCREEN3D
26-03-2008, 16:44
Da in der manpage nichts dazu steht, kann readline() das wohl nicht.
Eine Umleitung funktioniert so:

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <readline/readline.h>

int main()
{
/* stdout nach stderr umleiten: */
int backup_stdout = dup(STDOUT_FILENO); /* das alte stdout brauchen wir später noch */
dup2(STDERR_FILENO, STDOUT_FILENO); /* stderr verdoppeln und dabei stdout überschreiben */

char *input = readline("prompt: ");

/* Umleitung von stdout auf stderr aufheben: */
dup2(backup_stdout, STDOUT_FILENO);
close(backup_stdout);

puts(input);

return EXIT_SUCCESS;
}
Kompilieren mit -lreadline -ltermcap.

rfk
27-03-2008, 07:51
Perfekt, funktioniert einwandfrei. Vielen lieben Dank. :)
Nur noch aus Interesse: warum sollte ich gegen die Termcap-Bibliothek linken? Davon nutze ich ja nichts (und es funktioniert natürlich auch ohne).

BLUESCREEN3D
27-03-2008, 13:39
warum sollte ich gegen die Termcap-Bibliothek linken? Davon nutze ich ja nichts (und es funktioniert natürlich auch ohne).
Auf meinem System ging es nicht ohne, deshalb hatte ich das dazugeschrieben.