Let's write β

プログラミング中にできたことか、思ったこととか

システムコールの番号を調べる。

最近アセンブラの勉強をはじめまして、フフの表を出力したり素数判定をしたり階乗を計算したりと徐々に勉強してみています。そこで問題になるのが、システムコールの番号です。
一度ヘッダーにまとめても良いのですが、検索できるとなお便利です。そこで
こんなちょっとしたシェルスクリプトをつくってみました

#!/bin/sh
if [ $# -eq 1 ];then
        sixtyfourbitp=`uname -a | grep 'x86_64' | wc -l`
        if [ $sixtyfourbitp -eq 1 ];then
                headerfile='/usr/include/asm/unistd_64.h'
        else
                headerfile='/usr/include/asm/unistd_32.h'
        fi
        cat $headerfile | awk \
        '/^#define __NR/ {
        sub(/__NR_/,"",$2)
        if($2~/'$1'/)
        printf("%s\t%s\n",$3,$2)
        }'
else
        echo "Usage: fsysc PATTERN"
fi

こんな感じで動作します

$./fsysc.sh write
4	write
146	writev
181	pwrite64
334	pwritev
./fsysc.sh '^write$'
4	write
./fsysc.sh '^write'
4	write
146	writev

このように、システムコールの名称だけを対象に正規表現で検索できます。