脳ざらし紀行


2007-03-13

_ qsort の callback の書き方 Ruby/DL 編

int a[] = { 1, 3, 9, 2, 7, 4, 5, 8, 6 };
int main() {
    int i;
    qsort(a,sizeof(a)/4,4,"\x8b\0+\x02\xc3");
    for (i = 0; i < sizeof(a)/4; i++) {
        printf("%d ", a[i]);
    }
    puts("");
}

これを Ruby/DL を使って書くとこうなる。

require 'dl'
a = [1, 3, 9, 2, 7, 4, 5, 8, 6]
h = DL.dlopen('libc.so.6')
qsort = h.sym('qsort', '0PIIP')
ap = a.to_ptr
qsort.call(ap, a.size, 4, "\x8b\0+\x02\xc3")
p ap.to_a('I') #=> [1, 2, 3, 4, 5, 6, 7, 8, 9]

プラットフォーム依存だから、リファレンスには載せることができませんね。

お名前:
E-mail:
コメント:
本日のリンク元

最近のコメント

2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|04|05|
2011|04|
2012|03|07|
2013|01|02|07|
トップ «前の日記(2007-03-11) 最新 次の日記(2007-03-17)» 編集