C ++流问题(代码中注释的解释)

时间:2011-02-09 22:59:37

标签: c++ stream iostream

我正在使用找到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 ++流的了解相当薄弱。有人可以解释一下:

  1. 评论中提到了哪些streambufs?
  2. 在什么条件下streambufs会有非零bufsizes?
  3. 最后但并非最不重要,有人可以指向一个资源(双关语)在线提供一个清晰而温和的C ++ IO流介绍吗?

1 个答案:

答案 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 ();