Hallo Kollegen Programmierer.Turn Stream in Funktion Argument für die Verwendung von Telnet und Ncurses
Ich entwickle ein C/C++ Programm mit Sockets, die über Telnet mit dem Server verbunden werden sollen.
void writeline(int socketfd, string line)
{
string tosend = line + "\n";
write(socketfd, tosend.c_str(), tosend.length());
}
Gibt es eine Möglichkeit, ein Stream-Objekt wie cout zu schaffen, cerr, verstopfen oder sogar eine Datei (: Ich bin mit diesem funcion
Um Text und ANSI-Codes an den Telnet-Remote-Terminal zu senden von C) das sendet alles, was es zu einer Funktion bekommt?
Zum Beispiel:
clientout << "Hello World";
so etwas wie diese nennen würde:
writeline(clientout.str()); //or alike
Ich habe so etwas wie dies im letzten Jahr, als ich einen Mikroprozessor programmiert (mit AVR) und stdout in eine Funktion umgeleitet das hat alles an die USART-Verbindung gesendet. Ich hatte gehofft, dass ich jetzt so etwas machen könnte. Diese
ist, wie ich es tat, dann:
static int usart_putchar(char c, FILE *stream)
{
while (!(UCSR0A & (1<<UDRE0)));
UDR0 = c;
return 0;
}
static FILE usart_stream = FDEV_SETUP_STREAM(usart_putchar, NULL, _FDEV_SETUP_WRITE);
int main()
{
//(...)
stdout = &usart_stream;
//(...)
}
Ich bin daran interessiert, weil, abgesehen davon, ein einfacher Weg, um in den entfernten Terminal zu drucken, ich auch nur zu denken über die Verwendung von ncurses einen Strom benötigen mit mein Programm. Um es zu benutzen, brauche ich this Funktion, die einen Strom für die Eingabe und einen anderen für die Ausgabe benötigt.
Ich entschuldige mich für die lange Frage. Vielen Dank im Voraus.
Ich sehe zu implementieren. Gibt es eine Möglichkeit, die "FILE" von einem "Streabuf" zu bekommen? Es ist nur so, dass Ncurses nicht für C++ gemacht wird. Die Definition der Funktion lautet "SCREEN * newterm (char * type, FILE * outfd, FILE * infd)". Vielen Dank. –
Ich habe jede geschützte virtuelle Funktion in streambuf überprüft, konnte aber nicht verstehen, wie Sie das, was Sie sagten, implementen. http://www.cplusplus.com/reference/streambuf/streambuf/ können Sie mir sagen, wie ich es tun kann? –
'FILE' ist C, nicht C++. Sie können den C 'FILE'-Zeiger nicht irgendwie an ein C++' std :: streambuf' anhängen. Was die Unterklassen 'std :: streambuf' betrifft, so wird es leider viel mehr als 500 Zeichen benötigen, um in einen stackoverflow.com-Kommentar zu kommen, um ein Tutorial für die Unterklasse' std :: streambuf' zu schreiben. –