Я хочу, чтобы обрабатывать данные POST в программе C CGI на LINUX (SLES64)читает стандартный ввод с веб-сервера
В качестве первого шага я получаю HTTP заголовок с длиной содержимого.
Теперь я хочу прочитать данные POST со стандартного ввода.
Я хочу прочитать AT MOST 5000 байт данных cgi. Каждый POST с большим количеством игнорируется!
number_of_bytes_read = read(0, buffer, content_length);
Теперь есть один частный случай:
Пользователь заполняет форму в браузере, а затем он нажимает кнопку.
Веб-сервер Apache получает заголовки запросов вместе с данными формы.
Apache принимает заголовок запроса «длина контента», в этом случае 4875 байт, он также принимает байтовый поток длиной 4875 байтов.
Теперь Apache создает новый процесс, который в конечном итоге обработает данные cgi.
Apache должен передать 4875 байт данных cgi новому процессу.
Как он это делает?
Выполняет ли он взаимодействие между процессами, так что Apache создает сокет для нового процесса?
В этом случае другая сторона, программа CGI может возникнуть следующая проблема:
Программа CGI получает длину содержимого, хочет прочитать 4875 байт за один проход, но из-за задержек сети получает первый раз всего 4300 байт.
Но если Apache не создает сокет для нового процесса cgi (inter process comm.), Может ли быть в том, что программа cgi также не захватывает все байты в первый раз?
«* Вы хотите прочитать, пока не будете читать EOF ... *», или пока сумма значений, возвращаемых всем вызовом 'read()', не добавила до 5000 или 'read()' return ' -1'. – alk
Спасибо, что поймал это, я обновил свой ответ. – CalumMcCall