是什么让read()成为一个系统调用?

时间:2015-11-02 01:50:12

标签: system-calls

以下链接说read是一个系统调用: What is the difference between read() and fread()?

现在,我正在努力了解读取系统调用的原因。

例如
我使用Nuttx OS并使用open,close和ioctl方法注册了一个设备结构flash_dev(path' / dev / flash0')。这是作为pesudo文件系统中的inode添加的,信号量支持互斥。

现在,从应用程序我打开(' / dev / flash0')并阅读&读写控制。
现在,上述过程中的哪一部分使得读取系统调用?

2 个答案:

答案 0 :(得分:2)

read()函数是一个瘦的包装器,用于调用系统IOW进行系统调用所需的任何指令。当你调用read()(并且fread()也调用它时),相关的内核/驱动程序代码被调用并执行从文件中读取所需的任何内容。

答案 1 :(得分:2)

系统调用是一种调用,其功能几乎完全在内核中而不是在用户空间中。传统上,open(),read(),write()等都在内核中,而fread(),fwrite()等具有在用户空间中运行的代码,可以根据需要调用内核。

例如,在Linux中调用read()时,应用程序链接的标准库可能会执行以下操作:

   mov eax, 3          ;3 -> read
   mov ebx, 2          ;file id
   mov ecx, buffer  
   mov edx, 5          ;5 bytes 
   int 80h

它就是 - 它只需要传入的参数并通过int 80(中断)指令调用内核。作为应用程序员,调用在用户空间,内核或两者中运行通常并不重要。它对于调试或性能原因很重要,但对于简单的应用程序而言,它确实不重要。