Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 系统调用号和系统调用处理程序指针之间存在冲突_Linux_Operating System_Linux Kernel_System Calls - Fatal编程技术网

Linux 系统调用号和系统调用处理程序指针之间存在冲突

Linux 系统调用号和系统调用处理程序指针之间存在冲突,linux,operating-system,linux-kernel,system-calls,Linux,Operating System,Linux Kernel,System Calls,当我阅读操作系统概念(7e、Silberschatz、Galvin、Gagne)时,我遇到了一个关于向linux内核添加系统调用的研究项目。书上说 中列出了Linux内核最新版本的系统调用号 /usr/src/linux-2.x/include/asm-i386/unistd.h。(例如,_unr_uclose 对应于为关闭文件而调用的系统调用close() 描述符,定义为值6。) /标题下的usr/src/linux-2.x/arc/i386/kernel/entry.S 条目(系统调用表)。

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

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

我已经从ubuntu存储库下载了最新的linux源代码包,并找到了上面提到的源文件,其中有一些目录和文件名的小改动。但是有一件有趣的事情让我困惑,文件/usr/src/linux-source-2.6.31/arch/x86/kernel/less syscall\u table\u 32.S中,sys\u close存储在书中提到的编号为6的条目中,然而,在unistd.h文件中,定义为57而不是6。这种差异的原因是什么


提前感谢

您确定要比较类似的体系结构吗?在不同的体系结构上,系统调用可能有不同的数字。例如,在x86上,close实际上是6,而在x86-64上,close是3(在我的PC上以unistd.h查找)。

我再次检查,我确定它们的拱门都是相同的。你在看什么路径?我在x86和x86-64的/usr/include/asm/unistd_32.h和/usr/include/asm/unistd_64.h中分别找到了系统调用号。如果您使用的是普通x86,我希望/usr/include/asm/unistd.h将_NR_close定义为6。我检查了两个文件的路径是否具有相同的值。但是在内核源代码中,include/asm generic文件夹中只有一个unistd.h。为什么会这样?没有分别用于x86和x86_64的文件