以下链接说read是一个系统调用: What is the difference between read() and fread()?
现在,我正在努力了解读取系统调用的原因。
例如:
我使用Nuttx OS并使用open,close和ioctl方法注册了一个设备结构flash_dev(path' / dev / flash0')。这是作为pesudo文件系统中的inode添加的,信号量支持互斥。
现在,从应用程序我打开(' / dev / flash0')并阅读&读写控制。
现在,上述过程中的哪一部分使得读取系统调用?
答案 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
(中断)指令调用内核。作为应用程序员,调用在用户空间,内核或两者中运行通常并不重要。它对于调试或性能原因很重要,但对于简单的应用程序而言,它确实不重要。