这两个调用之间的区别:读取与 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);

不确定您对此有多少背景知识,如果我写下您已经知道的内容,我们深表歉意。 readread_iter 充当 f_op(文件操作结构)中的函数指针。 File operations 是一个包含大量不同函数的通用结构 pointers/declarations ,可用于操作任何被认为是文件的东西。 readread_iter 是该结构中的两个指针。

实际上,我们无法确切地知道 readread_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

“可能”一词的使用告诉您这些函数指针在理论上可以用于任何用途,因此如果您想了解更多详细信息,则必须查看为特定文件调用的特定函数,您有兴趣。