susan·jane 发表于 2006-10-8 23:56:58

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

请问:

    在内核中读取用户空间的文件如何判断是否已经读到文件末尾?用什么系统调用或者内核API?
      请大家多指教,感谢!

wsgtrsys 发表于 2006-10-11 18:37:01

我也想知道这个问题

ubo2001 发表于 2006-12-25 09:18:23

我现在想知道你们是怎么对用户空间的文件进行读写操作的。 :-D

zyzii 发表于 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页。
页: [1]
查看完整版本: 请教:在内核中读取用户空间的文件如何判断是否已经读到文件末尾