Как правильно создать глобальную переменную G-Wan?
--- config.h
extern char userurl[3];
char userurl[3];
--- index.c
include "config.h"
int main(int argc, char *argv[]) {
char *req_g="",*req_p="";
get_arg("g=", &req_g, argc,argv);
get_arg("p=", &req_p, argc,argv);
strcat(userurl,req_g);
strcat(userurl,req_p);
..
xbuf_xcat(reply,"%s",userurl);
..
return 200;
}
Тогда я использовал http://127.0.0.1:8080/?index&g=a&p=b
Я перезагружаюсь несколько раз, и результаты дублируются: userurl не освобождается...
Как правильно объявить extern
или же global
переменные для Гван?
1 ответ
Каждый скрипт G-WAN компилируется отдельно. В результате все ваши переменные являются статическими (локальными для этого модуля) - вы не можете делиться ими без использования указателей и атомарных операций.
Чтобы упростить использование глобальных переменных, G-WAN предоставляет постоянные указатели (US_HANDLER_DATA
, US_VHOST_DATA
, или же US_REQUEST_DATA
):
void *pVhost_persistent_ptr = (void*)get_env(argv, US_VHOST_DATA);
if(pVhost_persistent_ptr)
printf("%.4s\n", pVhost_persistent_ptr);
// get a pointer on a pointer (to CHANGE the pointer value)
void **pVhost_persistent_ptr = (void*)get_env(argv, US_VHOST_DATA);
if(pVhost_persistent_ptr)
*pVhost_persistent_ptr = strdup("persistent data");
Несколько примеров, таких как persistence.c или stream3.c, иллюстрируют, как работать с реальными программами.