LINUX.ORG.RU

CGI и stdin


0

0

есть программа написанная на си. эта программа должна обрабатывать данные вэб-формы , которые отсыдаются методом post. загвоздка в том, что я не могу считать эти данные. в перле все понятно и просто, а вот как это сделать из си-проги ??


Насколько я помню это храница в переменных окружения. env().

OxiD ★★★★
()

На сколько я помню есть два метода
get - в данном случае получаем строку из переменных окружения
post - получаем данные на stdin

для пост, stdin не должен заврываться в самой программе,
а читается самым простым способом getchar например
или read. как вам больше нравиться.
Вообще мне нравиться больше post не приходиться лезти к переменным
окружения из Це.

Aleks_IZA
()
Ответ на: комментарий от NikZ

#include <stdio.h>
#include <unistd.h>

int main(int argc, char **argv)
{
	char buf[4096];
 	printf ("Content-type: text/html\n\n");
	read((int)stdin, &buf, 4095);
	printf("%s\n", buf);	
	return 0;
}

вот примитив, которым я читыю данные, которые отсылаются методом пост. что бы я не отсылал, буфер всегда пуст. посткажите, в чем тут дело ???

NikZ
() автор топика
Ответ на: комментарий от NikZ

все, разобрался, fgets() все читает нормально. теперь вопрос в другом, где можно найти коды символом по которым кодируются всякие символя типа ; " & перенос строки и прочие ???

NikZ
() автор топика
Ответ на: комментарий от NikZ

это стандартная функция URI-трансляции, она присутствует во всех приличных либах для CGI.
Поищи в sourceforge.net на предмет libcgi или cgilib.
Там их несколько - выберешь себе подходящую.
Ибо писать CGI на C/C++ и не пользовать API спец. библиотек, значит изобретать велосипед.

loki
()
Ответ на: комментарий от NikZ

NikZ (*) (2003-01-05 13:25:03.473):
> read((int)stdin, &buf, 4095);
Понял, почему не работает?

На вс. случай ответ:
read(0, &buf, 4095);
а stdin -  указатель на  структуру FILE

И, кстати, многовато для стека 4096. Лучше так:

сhar buf[4096];
int main(int argc, char **argv)
{
        printf ("Content-type: text/html\n\n");
...

Die-Hard ★★★★★
()

Да и тут не проблема в принципе:
- read((int)stdin, &buf, 4095);
+ read(fileno(stdin), &buf, 4095);
и всё

loki
()

ок, понял, спасибо

NikZ
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.