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