Форум: "Прочее";
Текущий архив: 2008.05.25;
Скачать: [xml.tar.bz2];
ВнизКто имел дело с разработкой FastCGI на C/C++ или даже Delphi Найти похожие ветки
← →
Ega23 © (2008-04-14 13:21) [0]Сижу, смотрю headers для FastCGI. Хоть убей, никак не могу понять - каким образом и где переопределяются стандортные stdin - stdout?
вот по документации пример обычного CGI:
The CGI program is examples/tiny-cgi.c:
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
int count = 0;
printf("Content-type: text/html\r\n"
"\r\n"
"<title>CGI Hello!</title>"
"<h1>CGI Hello!</h1>"
"Request number %d running on host %s\n",
++count, getenv("SERVER_NAME"));
}
Теперь FastCGI:
#include "fcgi_stdio.h"
#include <stdlib.h>
void main(void)
{
int count = 0;
while(FCGI_Accept() >= 0)
printf("Content-type: text/html\r\n"
"\r\n"
"<title>FastCGI Hello!</title>"
"<h1>FastCGI Hello!</h1>"
"Request number %d running on host %s\n",
++count, getenv("SERVER_NAME"));
}
сам принцип ясен, почему работает именно так - в принципе тоже более-менее понятно.
Но вот что не ясно - в обоих случаях идёт printf. А как во втором случае определяется, куда его перенаправить???
← →
Ega23 © (2008-04-14 13:30) [1]Нашёл.
#undef printf
#define printf FCGI_printf
Ну сишники, ну нафига вот так-вот??? Чуть моск не сломал, думал как-то стандартный IO переопределили...
← →
Anatoly Podgoretsky © (2008-04-14 13:31) [2]> Ega23 (14.04.2008 13:21:00) [0]
Об этом тебе не надо беспокоиться, когда ты получаешь управление ввод/вывод тебе уже назначен системой.
← →
Ega23 © (2008-04-14 13:35) [3]
> Об этом тебе не надо беспокоиться, когда ты получаешь управление
> ввод/вывод тебе уже назначен системой.
Дык и там и там printf стоит. В принципе, FastCGI от обычного отличается, что он не стандартным IO оперирует, а либо сокетом, либо пайпом. В целом всё понятно, но вот один и тот же printf чуть мозг не разорвал. :)
← →
Anatoly Podgoretsky © (2008-04-14 13:46) [4]> Ega23 (14.04.2008 13:35:03) [3]
Я уже прочитал, а чтобы было если бы тебе автор под руку попался.
← →
Ega23 © (2008-04-14 13:51) [5]
> Anatoly Podgoretsky © (14.04.08 13:46) [4]
Вот это меня в сях и убивает. Написал свой TImage, но обозвал его - TButton.
← →
Anatoly Podgoretsky © (2008-04-14 13:54) [6]> Ega23 (14.04.2008 13:51:05) [5]
Ну это ты можешь и в Дельфи сделать. Правда тяжелее.
← →
Anatoly Podgoretsky © (2008-04-14 14:01) [7]Вот тебе аналогичная подлость.
type
Integer = string;
...
var
I : Integer;
begin
I := 123;
I := "123";
← →
Ega23 © (2008-04-14 14:32) [8]
> Anatoly Podgoretsky © (14.04.08 14:01) [7]
>
> Вот тебе аналогичная подлость.
>
Да можно, не спорю. Просто не принято. А там - в порядке вещей.
Даже вобщем-то понятно для чего. Но поначалу мозг разрывает напрочь. :)
← →
Anatoly Podgoretsky © (2008-04-14 16:17) [9]> Ega23 (14.04.2008 14:32:08) [8]
Не принято, но всегда найдутся люди с альтернативными мозгами, а вот попадется подобная штучка, скрытая где ни будь в недрах, долго будешь голову ломать, а я выбрал самый изуверский пример :-) Другие не такиеизуверские и понять будет тяжелее
← →
Fantasist.. (2008-04-14 19:56) [10]
> А там - в порядке вещей.
> Даже вобщем-то понятно для чего. Но поначалу мозг разрывает
> напрочь. :)
Да это правда, но когда привыкнешь, так уже знаешь, чего ожидать. Я тоже в свое время удивился, когда увидел, что функции определенные для WinAPI на самом деле никакие не функции, а макросы, вместо которых подставляется функция юникодной (с буквой U на конце) или не-юникодной (с А на конце) версии.
Хотя все равно макросы - это зло. Я их тоже не люблю. Хорошо, что в С++ есть шаблоны и классы с полиморфизмом, так что такие вещи использовать более не нужно.
Да, классическая С-шная шутка:
//Happy debugging
#define true false
← →
Kolan © (2008-04-14 22:56) [11]> а я выбрал самый изуверский пример :-)
<******> к вопросу о вчерашних скриптостраданиях. Только что кодер знакомый прислал, нашёл в коде программы, написанной уволенным коллегой незадолго до ухода:
<******> #define TRUE FALSE //счастливой отладки суки
* ****** такого извращённого юмора ещё не встречал
© Баш
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2008.05.25;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c