[Linux] llseek(2)

前回は,Plan9システムコールで引数や戻り値がレジスタサイズより大きい場合,どのように対処しているかについて書いた.そこで,Linux/x86ではどうやっているのかと疑問が湧いてくる.例えば,llseekは64bitのオフセットを扱う必要がある.答えは,manページがすぐに教えてくれるのだが,次のように引数はoffset_highとoffset_lowに分けて渡し,戻り値はresultに返している.結局,Plan9Linuxも同じことをやっているのね.コンパイラがコードを吐くか,手で書くかの違いはあるけど.

int llseek(unsigned int fd, unsigned long offset_high,
           unsigned long offset_low, loff_t __user * result,
           unsigned int origin)