Как правильно создать глобальную переменную 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, иллюстрируют, как работать с реальными программами.

Другие вопросы по тегам