Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.05.25;
Скачать: CL | DM;

Вниз

Кто имел дело с разработкой 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.016 c
8-1180420857
Demek
2007-05-29 10:40
2008.05.25
Экспорт картинки в 3ds


15-1207741068
TRSteep
2008-04-09 15:37
2008.05.25
Синтаксический анализ


2-1208972960
Alexey
2008-04-23 21:49
2008.05.25
Собственное окно отчёта в Delphi


2-1208884293
Agent89
2008-04-22 21:11
2008.05.25
Положение курсора вне формы


2-1209288486
hahol_64_rus
2008-04-27 13:28
2008.05.25
DBImage