如何正确创建G-Wan全局变量?

时间:2014-11-21 19:45:44

标签: global-variables g-wan object-persistence

--- 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未被释放......

为gwan声明externglobal变量的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

每个G-WAN脚本分别编译 。因此,所有变量都是 static (此模块的本地变量) - 如果不使用指针和原子操作,则无法共享它们。

为了简化全局变量的使用,G-WAN提供持久性指针(US_HANDLER_DATAUS_VHOST_DATAUS_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.cstream3.c说明了如何继续使用现实生活中的程序。