我正在寫一些阿帕奇(2.2)中的C模塊,我在它很新,所以我想知道:全局變量
我需要知道,如果它可以創建一個全局變量只要apache服務器開始運行就會啓動。
請參閱我需要一個主機名列表(這將是「特權」),以便我得到的每個請求,我需要檢查主機名是否出現在列表中(以檢查它是否「previleged 「)。
因此,列表應該是全局的(這樣每個服務器實例將具有相同的列表實例),並且我需要在開始時對它進行初始化。
如果可能,我該怎麼做?
謝謝!
我正在寫一些阿帕奇(2.2)中的C模塊,我在它很新,所以我想知道:全局變量
我需要知道,如果它可以創建一個全局變量只要apache服務器開始運行就會啓動。
請參閱我需要一個主機名列表(這將是「特權」),以便我得到的每個請求,我需要檢查主機名是否出現在列表中(以檢查它是否「previleged 「)。
因此,列表應該是全局的(這樣每個服務器實例將具有相同的列表實例),並且我需要在開始時對它進行初始化。
如果可能,我該怎麼做?
謝謝!
雖然不是一個完整的答案,我確實設法找到一種方法來獲得全局變量。
我將apr_pool_userdata_get
和apr_pool_userdata_set
方法用於進程的全局池(pconf和pool)。
爲了進一步參考:
http://apr.apache.org/docs/apr/0.9/group_apr_pools.html
實例:
附加靜態全局數據到服務器進程池中
char *data = "this is some data";
apr_pool_userdata_setn ((void*) data, "myglobaldata_key", NULL, request->server->process->pool);
附加malloced堆數據至服務器進程池中
char *data = strdup("this is some data");
apr_pool_userdata_setn ((void*) data, "myglobaldata_key", (apr_status_t(*)(void *))free, request->server->process->pool);
現在檢索全局數據:
char *data;
apr_pool_userdata_get ((void**)&data, "myglobaldata_key", request->server->process->pool);
if (data == NULL) {
// data not set...
}
該鏈接指向一個可以在模塊中使用靜態/全局變量,它們從多個線程訪問時需要小心。我的觀察是,考慮到可能有多個進程(全局變量將存在於一個進程中,由許多線程共享),靜態不應該被計入被初始化。即初始化一次可能是不夠的。
http://httpd.apache.org/docs/2.2/developer/thread_safety.html#variables
該列表是靜態的,還是從某些外部源加載? – 2011-06-13 11:34:16
我希望列表在啓動時從簡單的文本文件加載。 – user795810 2011-06-13 12:02:41