رفتن به مطلب
جامعه‌ی برنامه‌نویسان مُدرن ایران

SeedPuller

کاربـــر عـــــادی
  • تعداد ارسال ها

    1
  • تاریخ عضویت

اعتبار در سایت

2 خوب

درباره SeedPuller

توسعه‌ دهنده بَک اِند
مترجمین
  • تاریخ تولد تعیین نشده
  1. سلام. من داشتم برای تمرین سعی میکردم که یک کلاس برای libcurl بنویسم تا زمانی که میخوام از این کتابخونه استفاده کنم، صرفا یک شئ از کلاس خودم بسازم. اما متاسفانه زمان اجرای تابع write_data، برنامه segmentation fault می‌ده. خودم نتونستم مشکلش رو پیدا کنم. متشکر میشم اگر نسبت به حل این مشکل کمک کنید. کامپایلر استفاده شده: g++ (GCC) 9.2.0 g++ main.cpp mycurl.cpp -lcurl کتابخانه مورد استفاده: libcurl 7.67.0 سیستم عامل مورد استفاده: گنو/لینوکس - توزیع آرچ لینوکس کد مربوطه: mycurl.h #include <iostream> #include <cstdlib> #include <curl/curl.h> #include <string> using std::string; using std::cout; using std::cin; class myCurl{ public: myCurl(string u); ~myCurl(); int response(); string text(); private: string url; CURLcode res; CURL *curl_handle; FILE *file; string filename; static size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream); void perform(); }; mycurl.cpp #include "mycurl.h" myCurl::myCurl(string u){ url = u; filename = "/tmp/curltemp.txt"; curl_global_init(CURL_GLOBAL_ALL); curl_handle = curl_easy_init(); curl_easy_setopt(curl_handle, CURLOPT_URL, u.c_str()); curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_data); curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, file); } myCurl::~myCurl(){ curl_easy_cleanup(curl_handle); curl_global_cleanup(); } void myCurl::perform(){ file = fopen(filename.c_str(), "wb"); if(file) { res = curl_easy_perform(curl_handle); } fclose(file); } int myCurl::response(){ perform(); return static_cast<int>(res); } string myCurl::text(){ return ""; } size_t myCurl::write_data(void *ptr, size_t size, size_t nmemb, void *stream){ size_t written = fwrite(ptr, size, nmemb, static_cast<FILE *>(stream)); return written; } main.cpp #include "mycurl.h" int main(){ myCurl a("ifconfig.co"); cout << a.response() << std::endl; return 0; }
×
×
  • جدید...