⛳
【C 言語】【Zig】【PHP FFI】nghttp2 のバージョン番号を表示する
nghttp2 は HTTP/2 クライアントやサーバーを実装するために使われている。Debian では libnghttp2-dev
という名前のパッケージが用意されている。
sudo apt install libnghttp2-dev
コードを書いてみる
test.c
#include <stdio.h>
#include <nghttp2/nghttp2.h>
int main() {
nghttp2_info *info = nghttp2_version(0);
printf("%s\n", info->version_str);
return 0;
}
コンパイルしてみよう
clang -lnghttp2 test.c -o test
続いて Zig のコードを書く
const std = @import("std");
const print = std.debug.print;
const nghttp2 = @cImport({
@cInclude("nghttp2/nghttp2.h");
});
pub fn main() !void {
const info = nghttp2.nghttp2_version(0);
print("{s}\n", .{info.*.version_str});
}
ビルドは次の通り
zig run test.zig -lc -lnghttp2
最後に PHP FFI の例を記載する
// https://github.com/nghttp2/nghttp2/blob/master/lib/includes/nghttp2/nghttp2.h
// https://github.com/nghttp2/nghttp2/blob/master/lib/nghttp2_version.c
$ffi = FFI::cdef("
typedef struct {
int age;
int version_num;
const char *version_str;
const char *proto_str;
} nghttp2_info;
nghttp2_info *nghttp2_version(int least_version);
");
$info = $ffi->nghttp2_version(0);
var_dump(
$info->version_str
);
Discussion