我必须实现一个bash脚本,该脚本使用libcurl到Web服务器的循环中执行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中我读到:


  该程序必须全局初始化某些libcurl功能。这意味着无论您打算使用该库多少次,都应该只完成一次。在您的程序的整个生命周期中一次。这是使用curl_global_init()完成的


对于我来说,尚不清楚“程序的整个生命周期”是否意味着如果我在2个单独的可执行程序中使用libcurl,则无论如何我都必须声明一次,例如在一个单独的文件中声明为初始化程序。或者,相反,我必须同时在callA源代码和callB中定义。

最佳答案

在您的情况下,callA和callB是在一个进程中运行的两个截然不同的程序,因此彼此完全独立。

它们每个都有一个“寿命”,因此两者都应称为curl_global_init()

关于c - 多个可执行文件上的libcurl和curl_global_init(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42228664/

10-13 03:34