下面的链接显示read是一个syscall:What is the difference between read() and fread()?
现在,我正在努力理解是什么使得读取一个系统调用。
,例如
我使用Nuttx并通过打开、关闭和ioctl方法注册了一个设备结构flash_dev (path‘/dev/ use 0’)。这是作为一个inode在pesudo文件系统中添加的信号量支持互斥。
现在,在应用程序中,我打开(‘/dev/ from 0’)并读取& ioctls。
现在,在上述过程中的哪一部分使读取一个syscall?
发布于 2015-11-02 03:29:23
read()函数是用来调用系统IOW以进行系统调用所需的任何指令的薄包装器。当您调用read() ( fread()也调用它)时,将调用相关的内核/驱动程序代码,并执行从文件读取所需的任何操作。
发布于 2015-11-10 19:09:45
系统调用是一种调用,其功能几乎完全存在于内核中,而不是用户空间中。传统上,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 80h (中断)指令调用内核。作为一个应用程序程序员,无论调用是在用户空间中运行,还是在内核中运行,或者两者都运行,这并不重要。对于调试或性能方面的原因,它可能很重要,但是对于简单的应用程序来说,这并不重要。
https://stackoverflow.com/questions/33469535
复制相似问题