当前位置: 首页 > 面试题库 >

在哪里可以找到系统调用源代码?

闾丘京
2023-03-14
问题内容

在Linux中,只要有源代码树,在哪里可以找到所有系统调用的源代码?另外,如果我想查找特定系统调用的源代码和程序集,是否可以在终端中键入以下内容
my_system_call


问题答案:

您需要Linux内核源代码才能查看系统调用的实际源代码。手册页(如果安装在本地系统上)仅包含调用的文档,而不包含调用源本身。

对于您来说不幸的是,系统调用并不仅仅存储在整个内核树中的一个特定位置。这是因为各种系统调用可以引用系统的不同部分(进程管理,文件系统管理等),因此将它们与与该系统的特定部分相关的树的部分分开存储是不可行的。

您可以做的最好的事情就是寻找SYSCALL_DEFINE[0-6]宏。它(显然)用于将给定的代码块定义为系统调用。例如,fs/ioctl.c具有以下代码:

SYSCALL_DEFINE3(ioctl, unsigned int, fd, unsigned int, cmd, unsigned long, arg)
{
/* do freaky ioctl stuff */
}

这样的定义意味着ioctl系统调用已声明,并接受三个参数。SYSCALL_DEFINE均值旁边的数字表示自变量的数量。例如,在中getpid(void)声明的情况下kernel/timer.c,我们有以下代码:

SYSCALL_DEFINE0(getpid)
{
        return task_tgid_vnr(current);
}

希望这能使事情变得简单。



 类似资料:
  • 问题内容: 在哪里可以找到javax.crypto源代码? --update 感谢OpenJdk版本,但是jdk6版本呢? 问题答案: 下载链接 http://hg.openjdk.java.net/jdk7/jdk7/jdk/file/tip/src/share/classes/javax/crypto(OpenJDK版本) http://download.java.net/jdk6/sourc

  • 问题内容: 我想看看Java API中的方法是做什么的。所以我想要JDK源代码。在重新安装Linux之前,我先安装了包含所有正式源代码的软件包。我只需要告诉Eclipse这个文件在哪里,就可以看到代码。但是现在我没有文件了… 所以问题是:在哪里可以找到它? 问题答案: 你尚未说出所需的版本, JDK 8源代码的存档以及JDK 7和JDK 6。 此外,你可以浏览或克隆的Mercurial库:8,7,

  • 问题内容: 因此,我一直在浏览linux glibc源代码,但看不到它实际上在做什么。以下来自,但它指示了许多源文件。这里发生了什么?显然我缺少了一些东西。秘密是什么,它在哪里进行系统调用或实际执行某项操作? 是一些传统的疯狂。 似乎是一个简单的宏设置。而且,尽管我发现有上百万种用法,但并未在任何地方定义它。 是否有帮助的指南来了解glibc如何在某处工作? 问题答案: 您发现的是未实现的系统的存

  • 问题内容: 我试图在glibc源代码中找到select()源代码(Linux,i386架构),但我找不到任何东西(与所述体系结构有关) 谁能指出我的select()源代码? 问题答案: select()不是libc的函数,而是内核函数,因此您需要查看内核源代码。 您可以通过查看手册页来说明这一点:如果在第2节中,则为内核函数;如果在第3节中,则为标准C库的函数,在您的情况下为glibc。 编辑:像

  • 问题内容: 我想重写JDK 的实现并重新编译。 在哪里可以找到JDK8 / JavaFX 8的源代码? 问题答案: JavaFX 8的源可在以下位置获得: http://hg.openjdk.java.net/openjfx/8/master/rt 今天,JavaFX 8几乎是完全开源的。 使用OpenJDK 8构建JavaFX 8的说明

  • 问题内容: 我有点熟悉JNI,并且很好奇我在java.lang包中看到了某些本地方法的机器特定实现。, 例如。 我在[JDK_HOME] / jre / bin中找到了一堆DLL,但是就像我说的那样,我正在尝试查找源代码。 有谁知道在哪里可以找到本地源代码?它甚至可用,还是按Sun分类(哎呀,我的意思是“我们要赢它” Oracle)? 问题答案: 对于JDK6,你可以从java.net下载源代码。