Вопрос о потоках C ++ (объяснение комментария в коде) - PullRequest
2 голосов
/ 10 февраля 2011

Я играю с приложением 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. на какие потоковые буферы ссылаются в комментарии?
  2. при каких условиях у streambufs были бы ненулевые значения bufsize?

И последнее, но не менее важное: может ли кто-нибудь указать на ресурс (предназначенный для каламбура), который дает четкое, но щадящее представление о потоках ввода-вывода C ++?

1 Ответ

2 голосов
/ 10 февраля 2011

на какие потоковые буферы ссылаются в комментарии?

Это относится к 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 были бы ненулевые значения bufsize?

Комментарий, на который вы ссылаетесьэто дружеское напоминание.Объекты fcgi_streambuf в этом примере кода построены в цикле;когда цикл заканчивается, они выходят из области видимости и, таким образом, уничтожаются.

Комментарий предупреждает, что во многих случаях пользователю придется очищать поток вывода:

cout.flush ();
...