当前位置: 首页 > news >正文

价格低站长工具seo综合查询问题

价格低,站长工具seo综合查询问题,扁平式的网站,泊头哪里有做网站的Linux-0.11 文件系统read_write.c详解 模块简介 该模块实现了文件系统通用的读写的方法read/write/lseek。 根据文件类型的不同,在内部将调用不同的方法。如果是管道文件,则调用pipe.c中的读写方法,如果是字符设备,则会调用cha…

Linux-0.11 文件系统read_write.c详解

模块简介

该模块实现了文件系统通用的读写的方法read/write/lseek。

根据文件类型的不同,在内部将调用不同的方法。如果是管道文件,则调用pipe.c中的读写方法,如果是字符设备,则会调用char_dev.c中的方法,如果是目录或者普通文件,将调用file_dev.c中的读写方法,如果是块设备文件,将调用block_dev.c中的读写方法。

函数详解

sys_read

int sys_read(unsigned int fd,char * buf,int count)

该函数是read函数的系统调用函数, 主要作用是实现各种类型的读的方法。

其实现原理是通过fd找到对应的inode节点, 然后根据inode节点的属性去调用对应的read方法, 包括read_pipe,rw_char,block_read,file_read。

这里首先对参数进行校验。如果fd大于进程对于fd的限制值NR_OPEN(20), 会返回错误。除此以外, 如果需要读取的字符数量小于0或者fd对应的文件指针为空, 也都会返回错误。

如果count数量为0, 则直接返回0。

struct file * file;
struct m_inode * inode;if (fd>=NR_OPEN || count<0 || !(file=current->filp[fd]))return -EINVAL;
if (!count)return 0;

接下来就是通过if语句判断inode的属性去调用对应的read方法, 如果是管道文件, 就调用read_pipe,如果是字符型文件,就调用rw_char进行读取, 如果是块设备文件,就调用block_read, 如果是目录文件或者常规文件, 就调用file_read。

inode = file->f_inode;
if (inode->i_pipe)return (file->f_mode&1)?read_pipe(inode,buf,count):-EIO;
if (S_ISCHR(inode->i_mode))return rw_char(READ,inode->i_zone[0],buf,count,&file->f_pos);
if (S_ISBLK(inode->i_mode))return block_read(inode->i_zone[0],&file->f_pos,buf,count);
if (S_ISDIR(inode->i_mode) || S_ISREG(inode->i_mode)) {if (count+file->f_pos > inode->i_size)count = inode->i_size - file->f_pos;if (count<=0)return 0;return file_read(inode,file,buf,count);

sys_write

int sys_write(unsigned int fd,char * buf,int count)

该函数的作用与sys_read是有相似之处的,其实现原理是通过fd找到对应的inode节点, 然后根据inode节点的属性去调用对应的write方法, 包括write_pipe,rw_char,block_write,file_write。

接下来就是通过if语句判断inode的属性去调用对应的write方法, 如果是管道文件, 就调用write_pipe,如果是字符型文件,就调用rw_char进行读取, 如果是块设备文件,就调用block_write, 如果是目录文件或者常规文件, 就调用file_write。

if (inode->i_pipe)return (file->f_mode&2)?write_pipe(inode,buf,count):-EIO;
if (S_ISCHR(inode->i_mode))return rw_char(WRITE,inode->i_zone[0],buf,count,&file->f_pos);
if (S_ISBLK(inode->i_mode))return block_write(inode->i_zone[0],&file->f_pos,buf,count);
if (S_ISREG(inode->i_mode))return file_write(inode,file,buf,count);

sys_lseek

int sys_lseek(unsigned int fd,off_t offset, int origin)

该函数是重定位文件读写指针的系统调用。

	struct file * file;int tmp;if (fd >= NR_OPEN || !(file=current->filp[fd]) || !(file->f_inode)|| !IS_SEEKABLE(MAJOR(file->f_inode->i_dev)))//首先判断参数的有效性return -EBADF;if (file->f_inode->i_pipe)//管道节点头尾指针不能随意移动return -ESPIPE;switch (origin) {case 0://SEEK_SET  绝对值if (offset<0) return -EINVAL;file->f_pos=offset;break;case 1://SEEK_CUR  相对于当前偏移值if (file->f_pos+offset<0) return -EINVAL;file->f_pos += offset;break;case 2://SEEK_ENDif ((tmp=file->f_inode->i_size+offset) < 0)return -EINVAL;file->f_pos = tmp;break;default:return -EINVAL;}return file->f_pos;
}
http://www.yidumall.com/news/37909.html

相关文章:

  • 制作网站的公司办什么营业执照网络整合营销方案ppt
  • 一级做爰片a视频网站无代码建站
  • 网站无法发送邮件wordpress西安seo关键词推广
  • 公司网站建设升上去百度竞价排名广告
  • 义乌网站建设方案详细网址外链平台
  • 什么网站可以赚钱啊网络营销做的好的企业
  • 政府网站安全建设法律法规搜索引擎优化的对比
  • 电商网站模板免费站长工具域名查询ip
  • 薅羊毛做任务赚钱网站网站测试的内容有哪些
  • 政府机关单位网站建设怎么在百度上打广告
  • 四川高速公路建设开发集团有限公司网站推广赚钱软件
  • 中国建设银行官网首页 网站重庆森林为什么叫这个名字
  • 网站建设 预付款整站优化的公司
  • 怎么看网站室哪做的百度推广登录首页官网
  • 家装效果图郑州厉害的seo优化顾问
  • 做网站的一个专题百度没有排名的点击软件
  • 做网站赚什么钱环球军事网最新军事新闻最新消息
  • 手机产品 网站建设广州日新增51万人
  • 网站建设的总体需求分析天眼查企业查询
  • 报价网站系统上海疫情又要爆发了
  • 摄影设计网站深圳网络推广有几种方法
  • 可以做哪些网站有哪些内容吗竞价恶意点击犯法吗
  • 金华网站建设电话seo 优化技术难度大吗
  • 网站建设上传宝贝xamp淘特app推广代理
  • 网站关键字设置重庆seo点击工具
  • 网站统计付费二级域名网址查询
  • 广州互联网设计公司seo收录排名
  • 欧卡乐网站建设宁波江北区网站推广联系方式
  • 肇东网站建设可以搜索国外网站的搜索引擎
  • 做网站月度总结关键词异地排名查询