免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1571 | 回复: 0
打印 上一主题 下一主题

系统调用read的过程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-02-22 22:53 |只看该作者 |倒序浏览


asmlinkage ssize_t sys_read(unsigned int fd, char __user * buf, size_t count)
{
struct file *file;
ssize_t ret = -EBADF;
int fput_needed;
file = fget_light(fd, &fput_needed);
if (file) {
  loff_t pos = file_pos_read(file);
  ret = vfs_read(file, buf, count, &pos);
  file_pos_write(file, pos);
  fput_light(file, fput_needed);
}
return ret;
}
ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos)
{
ssize_t ret;
if (!(file->f_mode & FMODE_READ))
  return -EBADF;
if (!file->f_op || (!file->f_op->read && !file->f_op->aio_read))
  return -EINVAL;
if (unlikely(!access_ok(VERIFY_WRITE, buf, count)))
  return -EFAULT;
ret = rw_verify_area(READ, file, pos, count);
if (!ret) {
  ret = security_file_permission (file, MAY_READ);
  if (!ret) {
   if (file->f_op->read)
    ret = file->f_op->read(file, buf, count, pos);
   else
    ret = do_sync_read(file, buf, count, pos);
   if (ret > 0) {
    fsnotify_access(file->f_dentry);
    current->rchar += ret;
   }
   current->syscr++;
  }
}
return ret;
}
这样系统就调用的你所写的驱动程序中的read函数!
其他的调用跟这个差不多!


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/102839/showart_2184246.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP