码迷,mamicode.com
首页 > Web开发 > 详细

使用 luajit的ffi 调用libcurl

时间:2014-11-05 12:58:30      阅读:382      评论:0      收藏:0      [点我收藏+]

标签:io   ar   os   使用   for   sp   文件   on   cti   

--以下是用Libcurl获取指定url文件version.txt的内容

 

local ffi = require "ffi"

ffi.cdef[[
void *curl_easy_init();
int curl_easy_setopt(void *curl, int option, ...);
int curl_easy_perform(void *curl);
void curl_easy_cleanup(void *curl);
char *curl_easy_strerror(int code);
int curl_easy_getinfo(void *curl, int info, ...);

typedef unsigned int (*WRITEFUNC)(void *ptr, unsigned int size, unsigned int nmemb, void *userdata);


--]]

local libcurl = ffi.load("libcurl")

 

local curl = libcurl.curl_easy_init()
if curl then

local version=""

--这是把LUA函数转换成c回调函数
local getVersionCode = ffi.cast("WRITEFUNC", function(ptr,size,nmemb,userdata)
version=version..ffi.string(ptr)
return size*nmemb
end)

libcurl.curl_easy_setopt(curl, CURLOPT_URL, RES_URL.."version.txt")
libcurl.curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0)
libcurl.curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, getVersionCode)
libcurl.curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1)
libcurl.curl_easy_setopt(curl, CURLOPT_LOW_SPEED_LIMIT, 1)
libcurl.curl_easy_setopt(curl, CURLOPT_LOW_SPEED_TIME, 5)

local res = libcurl.curl_easy_perform(curl)
if res ~= 0 then
print(ffi.string(libcurl.curl_easy_strerror(res)))
end
libcurl.curl_easy_cleanup(curl)
getVersionCode:free()

remoteVersion=tonumber(version)
end

使用 luajit的ffi 调用libcurl

标签:io   ar   os   使用   for   sp   文件   on   cti   

原文地址:http://www.cnblogs.com/amazing-alex/p/4075802.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!