使用 luajit的ffi 调用libcurl
--以下是用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
转载于:https://www.cnblogs.com/amazing-alex/p/4075802.html
使用 luajit的ffi 调用libcurl相关推荐
- flutter/dart通过ffi调用rust代码
ffi简介 FFI(Foreign Function Interface)是用来与其它语言交互的接口,在有些语言里面称为语言绑定(language bindings),Java 里面一般称为 JNI( ...
- VC++调用libcurl开源库实现发送邮件的功能(附源码)
目录 1.为啥要选择libcurl库去实现邮件的发送 2.调用libcurl库的API接口实现邮件发送
- Electron通过ffi调用DLL
第一步建立一个DLL int WINAPI CAM_Open(char *pIn, char* pOut); 第二步安装ffi npm install --save ffi 针对electron版本重 ...
- luajit日记-FFI库
2019独角兽企业重金招聘Python工程师标准>>> LuaJIT FFI LibraryThe FFI library allows calling external C fun ...
- vue 调用c++_electron-vue跨平台桌面应用开发实战教程(七)——ffi调用C++(macOS平台)...
electron功能很强大,但是有一些跟操作系统底层交互的功能,electron无法实现,这个时候我们就可以调用原生来配合完成对应功能,本文主要讲解在macOS平台下,调用C++的dylib文件 在开 ...
- openresty通过ffi调用一个c编写的base64动态库
base64编码的原理 base64不是加密,就是一种编码,将字符串的二进制按6个bit一组,每组的6个bit的形式转换一下. 每组6个bit对应的字符是 有特定的映射表决定. 映射表: 字符 序号 ...
- rust 使用 ffi 调用 C 静态链接库
创建build.rs //build.rs extern crate dunce; use std::{env, path::PathBuf}; fn main() { let library_nam ...
- NodeJS通过ffi调用DLL
第一步建立一个dll, 提供方法如下 int WINAPI CAM_Open(char *pIn, char* pOut); 第二步安装ffi (前提已安装python2.x环境) npm insta ...
- 调用libcurl获取https的url文件的大小
long getDownloadFileLenth(const char *url){double downloadFileLenth = 0;//这里一定要是double类型,如果是long lon ...
最新文章
- textarea标签中的换行与空格问题
- Spring Boot 内置Tomcat——IntelliJ IDEA中配置模块目录设为文档根目录(DocumentRoot)解决方案
- 网站前端性能优化之javascript和css
- python pexpect pxssh scp_Python 的 pexpect 使用 scp 把文本文件传一半就不传了,怎么办?...
- 深度学习最常用的学习算法:Adam优化算法
- DAM的内涵正在改变
- 抖音否认封杀腾讯;程序员拒绝带电脑回家被开除,获赔 19.4 万;Excel 具备图灵完备性 | 极客头条...
- Solr基础,在Eclipse中运行Solr
- Open3d之点云顶点法线估计
- linux运维生产场景常用软件工具一览
- 带你领略Object.assign()方法的风骚操作
- 六自由度机械臂SolidWorks模型转化成urdf文件,添加简单gazebo属性并修改为xacro
- Python常用模块 之 re模块
- 「Medical Image Analysis」Note on 3D U-Net
- 广告代码(弹窗和富媒体)
- 【奶奶看了也不会】AI绘画 Mac安装stable-diffusion-webui绘制AI妹子保姆级教程
- OpenCV读取图片和保存图片全黑
- 多层板交期怎么才能有效把控?
- 京剧《断密涧》中李密和王伯当的唱段
- hive之反斜杠导致Unicode编码字段里的中文无法正常显示
热门文章
- xfce上安装mysql_在Fedora 33/32系统上安装PostgreSQL 13数据库的说明
- 20210627:力扣第247周周赛(上)
- 直方图均衡 视觉显著_计算机视觉一些项目实战技术(续)
- python图像切面numpy_NumPy做图像处理不香吗?我用Python把秋日里最美的景色做成了这种效果~...
- 大数据时代下的信息安全
- 英语总结系列(十五):别样的三月
- 深度学习论文TOP10,2019一季度研究进展大盘点
- 2018中国年度AI评选揭晓!10大领航企业,50家明星公司,10佳投资机构
- 十个优衣库仓库理货员,只有一个能留下,机器已经上岗了
- 自动给神经网络找bug,Google发布TensorFuzz