code:rdwr - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki
5725
5726 /*
5727 * common code for read and write calls:
5728 * check permissions, set base, count, and offset,
5729 * and switch out to readi, writei, or pipe code.
5730 */
5731 rdwr(mode)
5732 {
5733 register *fp, m;
5734
5735 m = mode;
5737 if(fp == NULL)
5738 return;
5739 if((fp->f_flag&m) == 0) {
5740 u.u_error = EBADF;
5741 return;
5742 }
5743 u.u_base = u.u_arg[0];
- 检查 读/写 权限
- 检查失败抛出错误
- 错误代码 : EBADF
5745 u.u_segflg = 0;
5746 if(fp->f_flag&FPIPE) {
5747 if(m==FREAD)
5750 } else {
- 处理 管道 读/写
5751 u.u_offset[1] = fp->f_offset[1];
5752 u.u_offset[0] = fp->f_offset[0];
5753 if(m==FREAD)
5756 dpadd(fp->f_offset, u.u_arg[1]-u.u_count);
5757 }
- 处理 文件 读/写
5758 u.u_ar0[R0] = u.u_arg[1]-u.u_count;
5759 }
- 向 用户态 返回 共读取/写入 的字节数
5760 /* ------------------------- */