envp
не является стандартным (ну, во всяком случае, не стандартом ISO C или C++, хотя в POSIX может быть что-то для этого).
Тем не менее, envp
почти такой же формат, как argv
, за исключением того, что у него нет управляющего argc
, ограничивающего его.
Как ни странно, каждый envp[x]
будет иметь вид "key=value"
, где key
— имя переменной среды, а value
— ее значение :-)
Вы должны обрабатывать элементы последовательно, пока не получите указатель NULL, например:
#include <stdio.h>
int main (int argc, char *argv[], char *envp[]) {
int i = 0;
while (envp[i] != NULL)
printf ("[%s]\n", envp[i++]);
return 0;
}
Википедия для CGI содержит более подробную информацию, надеюсь, не перегружая вас слишком большим количеством информации, такой как многословный RFC. бы.
Копирование соответствующих материалов, чтобы сделать этот ответ автономным:
- Server specific variables:
- SERVER_SOFTWARE — name/version of HTTP server.
- SERVER_NAME — имя хоста сервера, может быть десятичным IP-адресом.
- GATEWAY_INTERFACE — CGI/версия.
- Request specific variables:
- SERVER_PROTOCOL — HTTP/version.
- SERVER_PORT — порт TCP (десятичный).
- REQUEST_METHOD — имя HTTP-метода (см. выше).
- PATH_INFO — суффикс пути, если он добавлен к URL после имени программы и косой черты.
- PATH_TRANSLATED — соответствующий полный путь, предполагаемый сервером, если присутствует PATH_INFO.
- SCRIPT_NAME — относительный путь к программе, например /cgi-bin/script.cgi.
- QUERY_STRING — часть URL после ? символ. Может состоять из пар *имя=значение, разделенных амперсандами (например, var1=val1&var2=val2…) при использовании для отправки данных формы, передаваемых методом GET, как определено в HTML application/x-www-form-urlencoded.
- REMOTE_HOST — имя хоста клиента, сбрасывается, если сервер не выполнял такой поиск.
- REMOTE_ADDR — IP-адрес клиента (десятичный с точкой).
- AUTH_TYPE — тип идентификации, если применимо.
- REMOTE_USER используется для определенных AUTH_TYPE.
- REMOTE_IDENT — видеть ident, только если такой поиск производил сервер.
- CONTENT_TYPE — MIME-тип входных данных, если используется метод PUT или POST, как указано в заголовке HTTP.
- CONTENT_LENGTH — аналогично размер входных данных (десятичный, в октетах), если они предоставлены через HTTP-заголовок.
- Переменные, передаваемые пользовательским агентом (HTTP_ACCEPT, HTTP_ACCEPT_LANGUAGE, HTTP_USER_AGENT, HTTP_COOKIE и, возможно, другие), содержат значения соответствующих заголовков HTTP и поэтому имеют тот же смысл.
Боюсь, помимо этого уровня детализации вам, вероятно, придется придется изучить RFC. Поиск RFC3875 в Google должен найти его.
В частности, для POST
переменные среды включаются перед первой пустой строкой запроса (той, которая представляет тело сообщения). Они имеют вид:
Content-Type: application/wonderful_app_by_pax
Content-Length: 314159
где ключ нечувствителен к регистру, а значение следует за двоеточием.
person
paxdiablo
schedule
21.05.2011