多个可执行文件上的 libcurl 和 curl_global_init()
libcurl and curl_global_init() on multiple executable files
我必须实现一个 bash 脚本,该脚本使用 libcurl 循环执行 2 个请求到网络服务器。
该脚本具有以下结构:
while :
do
./callA
sleep(50)
./callB
sleep(10)
done
callA和callB的二进制代码结构如下:
#include <curl/curl.h>
int main(int argc, char *argv[]){
...
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(various settings...);
res = curl_easy_perform(curl);
if(res != CURLE_OK) {
//do something...
}
else {
//handle error...
}
}
curl_easy_cleanup(curl);
curl_global_cleanup();
}
从 libcurl documentation 我读到:
The program must initialize some of the libcurl functionality globally. That means it should be done exactly once, no matter how many times you intend to use the library. Once for your program's entire life time. This is done using curl_global_init()
我不清楚,如果 "program's entire life time" 意味着如果我在 2 个单独的可执行程序中使用 libcurl,我无论如何都必须声明一次,例如在一个单独的文件中作为初始值设定项。或者,相反,我必须在 callA 源代码和 callB 中都进行定义。
在你的例子中 callA 和 callB 是两个截然不同的程序 运行 在一个进程中,因此完全独立于彼此。
他们各有一个 "life time",因此两者都应调用 curl_global_init()
。
我必须实现一个 bash 脚本,该脚本使用 libcurl 循环执行 2 个请求到网络服务器。
该脚本具有以下结构:
while :
do
./callA
sleep(50)
./callB
sleep(10)
done
callA和callB的二进制代码结构如下:
#include <curl/curl.h>
int main(int argc, char *argv[]){
...
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(various settings...);
res = curl_easy_perform(curl);
if(res != CURLE_OK) {
//do something...
}
else {
//handle error...
}
}
curl_easy_cleanup(curl);
curl_global_cleanup();
}
从 libcurl documentation 我读到:
The program must initialize some of the libcurl functionality globally. That means it should be done exactly once, no matter how many times you intend to use the library. Once for your program's entire life time. This is done using curl_global_init()
我不清楚,如果 "program's entire life time" 意味着如果我在 2 个单独的可执行程序中使用 libcurl,我无论如何都必须声明一次,例如在一个单独的文件中作为初始值设定项。或者,相反,我必须在 callA 源代码和 callB 中都进行定义。
在你的例子中 callA 和 callB 是两个截然不同的程序 运行 在一个进程中,因此完全独立于彼此。
他们各有一个 "life time",因此两者都应调用 curl_global_init()
。