C言語

Cからjqを使う

jqのheadでlibjqが切り出されていたので、main.cを参考にしてCから呼び出してみた。 #include <stdio.h> #include <string.h> #include <jq.h> static void process(jq_state *jq, jv value, int flags) { jq_start(jq, value, flags); jv result; while (jv_is_valid(result = jq_nex</jq.h></string.h></stdio.h>…

libmawkを使ってみる

http://repo.hu/projects/libmawk/ #include <stdio.h> #include <stdlib.h> #include <libmawk.h> int main() { mawk_state_t *m; int argc = 2; char *argv[] = {"awk", "{print $2}"}; m = libmawk_initialize(argc, argv); if (m == NULL) { exit(EXIT_FAILURE); } puts("---"); libmaw</libmawk.h></stdlib.h></stdio.h>…

libdrizzleで繋いで閉じるだけ

exampleを参考にしつつ。 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <libdrizzle/drizzle_client.h> static void result_info(drizzle_result_st *result) { printf("Result: row_count=%" PRId64 "\n" " insert_id=%" PRId64 "\n" " warning_count=%u\n" " column_count=%u\n\n", drizzle_</libdrizzle/drizzle_client.h></unistd.h></stdlib.h></stdio.h>…

mongo_ext-0.19.1-x86-mswin32.gem

http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/mongo_ext-win32/?root=svn 細々と修正してVC9でビルド。mongo_extなくても動くみたいな感じだし、必要なかったかも。 defファイルがあるので、そのうちmswin32版が出るのかも。 WinSock2をリンクしてるけ…

ApacheのログをTokyoCabinetに吐く(いい加減な実装)

そろそろKVSを本格導入したいなーと思ったので、TokyoCabinetを少しさわってみた。 とりあえず、DSASの中の人が公開しているmod_syslogを改変して、テーブルデータベースにログを出力するモジュールを、ものすごくいい加減に実装。 #include "apr_hooks.h" #…

ファイルがキャッシュに乗ってのっているかどうかを調べる

Linux上のとあるファイルがページキャッシュに乗っているかどうかを調べたいなーと思ってGoogle先生にご相談したところ、こんなコマンドを教えてくれた。 ファイルをメモリにマップして、mincore(2)でページごとにRAMに存在するかどうかをチェックしているら…

渡されたブロックをProcで取得する

忘れがちなのでメモ。 rb_block_proc();

rb_iterate

忘れがちなのでメモ。 #include "ruby.h" static VALUE main_proc(VALUE arg) { VALUE each = arg; return rb_funcall(each, rb_intern("call"), 0); } static VALUE block(VALUE call_arg, VALUE block_arg, VALUE self) { rb_p(call_arg); rb_p(block_arg)…

win32fiber(失敗)

WindowsのFiberでcoroutineを作れないかと思ったものの、案の定、失敗。 動かないソースだけ貼り付けとく。 #include <windows.h> #include "ruby.h" static VALUE Fiber; static VALUE FiberError; struct win32fiber { LPVOID main_fiber; LPVOID fiber; VALUE proc; </windows.h>…

ruby_errinfo -> rb_errinfo()

1.9でruby_errinfoがrb_errinfo()になったらしい。 Tue Jan 2 10:29:54 2007 Eric Hodel <drbrain@segment7.net> * ext/zlib/zlib.c: fix to compile on YARV ruby_errinfo -> rb_errinfo() Mon Jan 1 08:07:06 2007 Koichi Sasada <ko1@atdot.net> * ext/tk/tcltklib.c: fix to compile on YARV r</ko1@atdot.net></drbrain@segment7.net>…

Ruby 1.9.1でfcloseで落ちる件

これか? 時間があったら追ってみよう。

libmspackでキャビネットファイルを解凍する

extractでディレクトリの展開はしてくれない、と。 #include <stdio.h> #include <stdlib.h> #include <libgen.h> #include <mspack.h> static int open_cabinet_set(struct mscab_decompressor *cabd, struct mscabd_cabinet *cab) { struct mscabd_cabinet *c, *c2; for (c = cab; c && (c->flags </mspack.h></libgen.h></stdlib.h></stdio.h>…

mkdir_p()

pオプション的動作のmkdir()。そーゆー動作の関数ってなかったっけなー? #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <errno.h> #ifdef _WIN32 #include <direct.h> #include <malloc.h> #define mkdir(p, m) _mkdir(p) typedef int mode_t; #else #include <unistd.h> #include <alloca.h> #endif #define IS_SE</alloca.h></unistd.h></malloc.h></direct.h></errno.h></sys/stat.h></sys/types.h></string.h>…

ruby.exeのパスを取得する

#include <windows.h> #include "ruby.h" static VALUE ruby_path(VALUE self) { HMODULE hModule; char path[_MAX_PATH]; hModule = GetModuleHandleA(NULL); GetModuleFileNameA(hModule, path, _MAX_PATH); return rb_str_new2(path); } __declspec(dllexport) void </windows.h>…

AquesTalk/Ruby(作りかけ)

http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/aqtk-ruby/?root=svn だいたい出来てきた。特徴としては… KAKASIを組み込んであるので(ある程度)漢字が読める 辞書をリソースとして取り込んでいるので、一応、辞書いらず やること。 英語をなんとかする …

一時ファイルを作ってファイル閉じたらすぐ削除

#include <windows.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <io.h> #include <fcntl.h> #include <share.h> char *make_tempfile(void *data, int len) { char *filnam; int fd; char tmpdirnam[_MAX_PATH]; char tmpfilnam[_MAX_PATH]; in…</share.h></fcntl.h></io.h></sys/stat.h></sys/types.h></string.h></stdlib.h></stdio.h></windows.h>

拡張ライブラリにリソースを埋め込む

#include <windows.h> #include "resource.h" #include "ruby.h" static HINSTANCE hDll; static VALUE get_rc(VALUE self) { VALUE str; HRSRC hRc; HGLOBAL hGm; LPVOID p; long size; hRc = FindResourceA(hDll, MAKEINTRESOURCEA(IDR_TEXT1), "TEXT"); if (hRc == N</windows.h>…

KAKASIを使う

エラー時の戻り値は空文字列かな。 #include <stdio.h> #include <stdlib.h> #include <errno.h> #include "libkakasi.h" int main() { char *argv[] = { "kakasi", "-isjis", "-JH", "-HK" }; char *p; if (kakasi_getopt_argv(4, argv) != 0) { perror("kakasi_getopt_argv()"); exit(1</errno.h></stdlib.h></stdio.h>…

一時ファイルを作ってファイル閉じたらすぐ削除 その2

fcloseを使ってみる。 #include <windows.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <io.h> #include <fcntl.h> #include <share.h> char *make_tempfile(void *data, int len) { char *filnam; int fd; char tmpdirnam[_MAX_PATH]; char tmpfilnam[…</share.h></fcntl.h></io.h></sys/stat.h></sys/types.h></string.h></stdlib.h></stdio.h></windows.h>

文字列リソースを使う

#include <windows.h> #include "resource.h" #include <stdio.h> int main() { char buf[BUFSIZ]; LoadStringA(NULL, IDS_STRING101, buf, BUFSIZ); puts(buf); return 0; } テスト 続行するには何かキーを押してください . . .</stdio.h></windows.h>

リソースに埋め込んだファイルを読み込む

#include <windows.h> #include "resource.h" #include <stdio.h> int main() { HRSRC hrc; HGLOBAL hgb; LPVOID p; hrc = FindResourceA(NULL, MAKEINTRESOURCEA(IDR_TEXT1), "TEXT"); printf("%d\n", SizeofResource(NULL, hrc)); hgb = LoadResource(NULL, hrc); p = LockReso</stdio.h></windows.h>…

MySQL: 簡単なサンプル

http://dev.mysql.com/doc/refman/4.1/ja/c.html MySQL/Rubyのバグ?を追うために少し調査。 #include <windows.h> #include <stdio.h> #include <stdlib.h> #include <mysql.h> #define MY_HOST "127.0.0.1" #define MY_USER "root" #define MY_PASSWD NULL #define MY_DB "foo" int main() { MYSQL</mysql.h></stdlib.h></stdio.h></windows.h>…

MySQL: プリペアドステートメントを使う

#include <windows.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <mysql.h> #define MY_HOST "127.0.0.1" #define MY_USER "root" #define MY_PASSWD NULL #define MY_DB "foo" int main() { MYSQL *my; MYSQL_RES *res; MYSQL_STMT *stmt; MYSQL_BIND bnd[1], rbnd[1]; char *que</mysql.h></string.h></stdlib.h></stdio.h></windows.h>…

libarchive: *_compression_programにオプションを渡すパッチ

archive_read_support_compression_program("lzop -dc")とかやるためのパッチ。 そのうち投げるかも。 --- filter_fork.c.orig 2008-12-28 15:08:31.000000000 -0500 +++ filter_fork.c 2009-01-30 00:36:13.000000000 -0500 @@ -50,14 +50,22 @@ __FBSDID("…

パイプでcat

#include <stdio.h> #include <errno.h> #include <unistd.h> #define MIN(m, n) ((m) < (n) ? (m) : (n)) #define BUFFER_SIZE 512 static int cat(const char *bufin, int inlen, char *bufout, int outlen) { int pfd_stdin[2]; int pfd_stdout[2]; pid_t pid; size_t len = 0; if (pi</unistd.h></errno.h></stdio.h>…

lsを実行して出力を得る

#include <stdio.h> #include <errno.h> #include <unistd.h> #define BUFFER_SIZE 512 static void ls() { int pfd[2]; pid_t pid; if (pipe(pfd) == -1) { perror("pipe"); exit(1); } pid = fork(); if (pid > 0) { // 親プロセス char buf[BUFFER_SIZE + 1]; int n, status; // 書き</unistd.h></errno.h></stdio.h>…

libarchive: archive_read_support_compression_programがうまく動かない

どうもオプションを渡せないみたいで、"lzop -dc"とかがうまく渡せない… この関数を使ってる人もあんまりいないみたいだし。

link:C99をサポートしないVC++2005

http://www.ttoyota.com/msvcee/msvcee27.php そんなに需要ないかなー? それとも、CだとVC6ばっか使われてるとか…

opensslの暗号化を使う

ちょっとopensslの暗号化をさわる必要があったので、サンプルを書いてみた。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <openssl/evp.h> #define KEYGEN_SALT NULL #define KEYGEN_COUNT 2048 static void print_hexstring(unsigned char *data, int datal) { int i; for (i </openssl/evp.h></string.h></stdlib.h></stdio.h>…

Lux IO 移植中…

http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/luxio/?root=svn コメントアウトしまくりでビルドだけ通った。 あとはmmapとかflockの中身を書かないと。