这两个调用之间的区别:读取与 read_iter
Difference between these two calls: read vs read_iter
我正在探索 linux 内核代码,在 vfs_read 函数中,我看到了这两个调用。谁能解释一下两者的区别?
所以我假设您指的是来自 vfs_read()
:
的 snippet 代码
if (file->f_op->read)
return file->f_op->read(file, buf, count, pos);
else if (file->f_op->read_iter)
return new_sync_read(file, buf, count, pos);
不确定您对此有多少背景知识,如果我写下您已经知道的内容,我们深表歉意。 read
和 read_iter
充当 f_op
(文件操作结构)中的函数指针。 File operations 是一个包含大量不同函数的通用结构 pointers/declarations ,可用于操作任何被认为是文件的东西。 read
和 read_iter
是该结构中的两个指针。
实际上,我们无法确切地知道 read
或 read_iter
在做什么,除非我们确切地知道正在读取的这个特定文件指向的是什么函数。所以更普遍的问题是,什么时候使用read
指针,什么时候应该使用read_iter
指针?
我见过的最佳答案来自 Linux 内核中的一个 document:
``read``
called by read(2) and related system calls
``read_iter``
possibly asynchronous read with iov_iter as destination
“可能”一词的使用告诉您这些函数指针在理论上可以用于任何用途,因此如果您想了解更多详细信息,则必须查看为特定文件调用的特定函数,您有兴趣。
我正在探索 linux 内核代码,在 vfs_read 函数中,我看到了这两个调用。谁能解释一下两者的区别?
所以我假设您指的是来自 vfs_read()
:
if (file->f_op->read)
return file->f_op->read(file, buf, count, pos);
else if (file->f_op->read_iter)
return new_sync_read(file, buf, count, pos);
不确定您对此有多少背景知识,如果我写下您已经知道的内容,我们深表歉意。 read
和 read_iter
充当 f_op
(文件操作结构)中的函数指针。 File operations 是一个包含大量不同函数的通用结构 pointers/declarations ,可用于操作任何被认为是文件的东西。 read
和 read_iter
是该结构中的两个指针。
实际上,我们无法确切地知道 read
或 read_iter
在做什么,除非我们确切地知道正在读取的这个特定文件指向的是什么函数。所以更普遍的问题是,什么时候使用read
指针,什么时候应该使用read_iter
指针?
我见过的最佳答案来自 Linux 内核中的一个 document:
``read``
called by read(2) and related system calls
``read_iter``
possibly asynchronous read with iov_iter as destination
“可能”一词的使用告诉您这些函数指针在理论上可以用于任何用途,因此如果您想了解更多详细信息,则必须查看为特定文件调用的特定函数,您有兴趣。