open()的定义在xv6中的位置

时间:2019-06-19 15:01:25

标签: c documentation system-calls xv6

我有一个分配的任务,可以让我设计自己的系统调用。为此,我想查看开放系统调用的定义。通过这个,我的意思是我想看看实际的open(const char *,const int)的定义方式,而不是sys_open的定义(因为我知道源代码在哪里并且可以读取它)。

在xv6的文档和xv6-public中的文件中,我都找不到定义原型的任何引用。 我和我朋友的理论是,它是在某个asm文件或某个.o文件中定义的。 会有人碰巧知道实际的源代码在哪里吗?非常感谢。

尝试在源文档中打开ctrl-f,并尝试对xv6-public中的所有文件进行grep。一无所获。

1 个答案:

答案 0 :(得分:0)

好吧

openuser.h中声明。

openusys.S中定义:

让我们看看:

SYSCALL(open)

将在

中进行转换
  .globl open; 
  open: 
    movl $SYS_ ## open, %eax; 
    int $T_SYSCALL; 
    ret

发生了什么事?

调用函数open

  • 将寄存器%eax设置为SYS_open(其值为15(请参见syscall.h),并在sysfile.c中定义SYS_open
  • 中断T_SYSCALL(64见traps.h)被提出。
  • 系统调用返回后,open也返回。