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

标签 global-variables g-wan object-persistence

---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 声明 externglobal 变量的正确方法是什么?

最佳答案

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

为了方便使用全局变量,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说明如何继续执行现实生活中的程序。

关于global-variables - 如何正确创建 G-Wan 全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27069124/

相关文章:

c - 要运行 G-WAN,您必须修复错误或删除此 Servlet

javascript - node.js 对象在数据库中的自动持久化

java - GAE 数据存储将不会持久拥有 1 :1 relationship within embedded JDO class

c - 打印所有全局变量/局部变量?

C 全局变量中的 C 横切关注点

c - Gwan kv,持久标志/项目数

java - gwan 7.12.6 上的 report.c 和 report.java servlet 出现故障

.net 对象持久性

jquery - fullCalendar UNIX 时间戳转换问题与选择事件

r - 我不希望我的全局环境在退出时在 R 中清除