我正在使用找到here的fastCGI应用程序。
以下评论在代码中:
if (content) delete []content;
// If the output streambufs had non-zero bufsizes and
// were constructed outside of the accept loop (i.e.
// their destructor won't be called here), they would
// have to be flushed here.
我对C ++流的了解相当薄弱。有人可以解释一下:
最后但并非最不重要,有人可以指向一个资源(双关语)在线提供一个清晰而温和的C ++ IO流介绍吗?
答案 0 :(得分:2)
评论中提到了哪些streambufs?
它指的是request.out
,它是重新分配的cout
的一部分:
FCGX_Request request;
...
fcgi_streambuf cout_fcgi_streambuf(request.out);
...
cout = &cout_fcgi_streambuf;
此重新分配意味着用户可以呼叫
cout << "Content-type: text/html\r\n"
<< ...
并在作为CGI应用程序运行时,在控制台(用于测试)或网络上显示文本。因此,一个代码示例可以在多个环境中运行。
在什么条件下streambufs会有非零bufsizes?
您所指的评论是友情提醒。此示例代码中的fcgi_streambuf
个对象是在循环中构造的;当循环结束时,它们会超出范围并因此被破坏。
该评论警告说,在许多情况下,用户必须刷新输出流:
cout.flush ();