请教:在内核中读取用户空间的文件如何判断是否已经读到文件末尾
请问:在内核中读取用户空间的文件如何判断是否已经读到文件末尾?用什么系统调用或者内核API?
请大家多指教,感谢! 我也想知道这个问题 我现在想知道你们是怎么对用户空间的文件进行读写操作的。 :-D 调用的API是sys_read。
在ext2的文件系统里,每个文件都有一个以block块为单位的i_size,代表文件的大小。
mm/filemap.c中的 void do_generic_mapping_read()函数中:
isize = i_size_read(inode);
end_index = (isize - 1) >> PAGE_CACHE_SHIFT;
if (unlikely(!isize || index > end_index)) {
page_cache_release(page);
goto out;
}
/* nr is the maximum number of bytes to copy from this page */
nr = PAGE_CACHE_SIZE;
if (index == end_index) {
nr = ((isize - 1) & ~PAGE_CACHE_MASK) + 1;
if (nr <= offset) {
page_cache_release(page);
goto out;
}
}
当文件读到最后的一个block块时,跳出。
具体见毛德操的《LINUX内核源代码情景分析》629页。
页:
[1]