2016-07-30 29 views
0

当在C中调用fopen()函数时,它会向内核发出系统调用。我想知道哪些内核模块负责处理系统调用并将文件描述符返回给调用程序。这些内核模块是否也负责处理read()和write()操作?如果不是,哪些模块负责。在Linux中使用文件时将负责哪些内核模块?

我摆弄着发出SCSI命令,并将不胜感激。

回答

2

当在C中调用fopen()函数时,它会向内核发出系统调用。

不完全是。 fopen(3)是一个函数最终调用open(2),系统调用。

我想知道哪些内核模块负责处理系统调用并将文件描述符返回给调用程序。

无。在Linux中,系统调用全部由核心内核处理,而不是模块。见fs/open.c

这些内核模块是否也负责处理read()和write()操作?如果不是,哪些模块负责。

相同的交易。见fs/read_write.c

在内核被赋予一个打开的路径时,它将首先确定你请求的文件所在的挂载点。文件系统将安装在该安装点,并且该文件系统实现在模块中实现。

文件系统在块设备上工作。而且这些块设备(例如SCSI,IDE)也在模块中实现。

我摆弄着发出SCSI命令,并将不胜感激。

看一看这里: http://sg.danny.cz/sg/sg3_utils.html

+0

任何意义,这将是核心内核的一部分。感谢您的信息。 – Daedalus

+1

@Daedalus模块将在处理打开/读取/写入系统调用时参与。系统调用的主要入口点位于核心内核中,但不同的文件系统类型通常作为模块实现,显然,对于“正常”文件访问,您需要在某个时间访问文件系统来处理这些系统调用。 – Andrew