Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1207899177
f_chel
2008-04-11 11:32
2008.05.25
Монитор


2-1209639326
lewka-serdceed
2008-05-01 14:55
2008.05.25
Удаление файла


2-1209531259
solo_
2008-04-30 08:54
2008.05.25
Назначение OnDrawColumnCell в Рантайм для Грида


2-1209709806
alshtam
2008-05-02 10:30
2008.05.25
Динамическое помещение картинок в dll


2-1209387942
switch
2008-04-28 17:05
2008.05.25
Графическое поле





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский