各位程序员您好。将流转换为函数参数以使用Telnet和Ncurses
我正在开发一个带有应该通过Telnet连接到服务器的套接字的C/C++程序。
要发送短信,ANSI代码到Telnet远程终端我使用这个funcion:
void writeline(int socketfd, string line)
{
string tosend = line + "\n";
write(socketfd, tosend.c_str(), tosend.length());
}
有没有一种方法来创建一个像COUT流对象,CERR,堵塞,甚至一个文件(从C),它发送到一个函数的一切?
例如:
clientout << "Hello World";
会叫这样的:
writeline(clientout.str()); //or alike
我做了什么,当我编程的微处理器(带AVR)和标准输出重定向到一个函数这个去年一样将所有内容都发送到USART连接。我希望我现在可以做那样的事情。
我这是怎么做的,然后:
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;
//(...)
}
我很感兴趣,这是因为,除了是打印到远程终端更简单的方法,我需要一个流甚至考虑使用ncurses的有我的程序。要使用它,我需要this函数,它需要一个流输入和另一个输出。
对于长期的问题,我表示歉意。 预先感谢您。
我看到的。有没有办法从“streabuf”获取“FILE”?这只是ncurses不适用于C++。函数的定义是“SCREEN * newterm(char * type,FILE * outfd,FILE * infd)”。谢谢。 –
我已经检查了streambuf中的每个受保护的虚拟函数,但无法理解如何执行你所说的内容。 http://www.cplusplus.com/reference/streambuf/streambuf/你能告诉我我该怎么做吗? –
'FILE'是C,而不是C++。你不能以某种方式将C'FILE'指针附加到C++'std :: streambuf'。至于'std :: streambuf'的子类化,恐怕要花费超过500个字符才能进入stackoverflow.com评论,以便编写一个为std :: streambuf进行子类化的教程。 –