QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3265|回复: 3

请教:在内核中读取用户空间的文件如何判断是否已经读到文件末尾

[复制链接]
发表于 2006-10-8 23:56:58 | 显示全部楼层 |阅读模式
请问:

    在内核中读取用户空间的文件如何判断是否已经读到文件末尾?用什么系统调用或者内核API?
      请大家多指教,感谢!
发表于 2006-10-11 18:37:01 | 显示全部楼层
我也想知道这个问题
回复

使用道具 举报

发表于 2006-12-25 09:18:23 | 显示全部楼层
我现在想知道  你们是怎么对用户空间的文件进行读写操作的。
回复

使用道具 举报

发表于 2006-12-26 10:20:27 | 显示全部楼层
调用的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页。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-22 14:20 , Processed in 0.068877 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表