系统调用号码和系统调用处理程序指针之间的冲突

当我读操作系统概念(7e,Silberschatz,Galvin,Gagne)时,我遇到了一个关于增加一个系统调用到linux内核的研究项目。 这本书说

最新版本的Linux内核的系统调用编号列在/usr/src/linux-2.x/include/asm-i386/unistd.h中。 (例如,与为closures文件描述符而调用的系统调用close()相对应的__NR_close定义为值6.)/usr/src/linux-2.x/arc/i386/kernel/entry .S在标题ENTRY(sys_call_table)下。 请注意,sys_close存储在表中的条目编号6处,以与在unistd.h文件中定义的系统调用编号一致。 (第75页)

我已经从ubuntu的存储库下载了最新的linux源码包,并发现了所提及的源文件,其目录和文件名更改较less。 但是在/usr/src/linux-source-2.6.31/arch/x86/kernel/less syscall_table_32.S文件中有一个有趣的事情让我感到困惑,sys_close存储在编号为6的条目中,正如书中所述,在unistd.h文件中__NR_close定义为57,而不是6.这个区别是什么原因?

提前致谢

你确定你比较像架构吗? 在不同的体系结构上,系统调用可能有不同的编号。 例如,在x86上,close确实是6,而在x86-64上,close是3(在我的PC上的unistd.h中查找)。