---config.h
extern char userurl[3];
char userurl[3];
---索引.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 声明 extern
或 global
变量的正确方法是什么?
最佳答案
每个 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说明如何继续执行现实生活中的程序。
关于global-variables - 如何正确创建 G-Wan 全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27069124/