⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 7.html

📁 linux 0.11中文版 有注释
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<a name='L29'>rw_ttyx (<b>int</b> <a href='../R/581.html' title='Multiple refered from 9 places.'>rw</a>, <b>unsigned</b> minor, <b>char</b> *<a href='../R/394.html' title='Multiple refered from 76 places.'>buf</a>, <b>int</b> <a href='../R/414.html' title='Multiple refered from 56 places.'>count</a>, off_t * pos)
<a name='L30'><font color='red'>{</font>
<a name='L31'>  <b>return</b> ((rw == READ) ? <a href='../R/714.html' title='Multiple refered from 2 places.'>tty_read</a> (minor, buf, count) :
<a name='L32'>          <a href='../R/715.html' title='Multiple refered from 4 places.'>tty_write</a> (minor, buf, count));
<a name='L33'><font color='red'>}</font>
<a name='L34'>
<a name='L35'><i><font color='green'>//// 终端读写操作函数。</font></i>
<a name='L36'><i><font color='green'>// 同上rw_ttyx(),只是增加了对进程是否有控制终端的检测。</font></i>
<a name='L37'><b>static</b> <b>int</b>
<a name='L38'>rw_tty (<b>int</b> <a href='../R/581.html' title='Multiple refered from 9 places.'>rw</a>, <b>unsigned</b> minor, <b>char</b> *<a href='../R/394.html' title='Multiple refered from 76 places.'>buf</a>, <b>int</b> <a href='../R/414.html' title='Multiple refered from 56 places.'>count</a>, off_t * pos)
<a name='L39'><font color='red'>{</font>
<a name='L40'><i><font color='green'>// 若进程没有对应的控制终端,则返回出错号。</font></i>
<a name='L41'>  <b>if</b> (current-&gt;tty &lt; 0)
<a name='L42'>    <b>return</b> -<a href='../R/61.html' title='Multiple refered from 29 places.'>EPERM</a>;
<a name='L43'><i><font color='green'>// 否则调用终端读写函数rw_ttyx(),并返回实际读写字节数。</font></i>
<a name='L44'>  <b>return</b> rw_ttyx (<a href='../R/581.html' title='Multiple refered from 9 places.'>rw</a>, current-&gt;<a href='../R/710.html' title='Multiple refered from 158 places.'>tty</a>, <a href='../R/394.html' title='Multiple refered from 76 places.'>buf</a>, <a href='../R/414.html' title='Multiple refered from 56 places.'>count</a>, <a href='../R/552.html' title='Multiple refered from 40 places.'>pos</a>);
<a name='L45'><font color='red'>}</font>
<a name='L46'>
<a name='L47'><i><font color='green'>//// 内存数据读写。未实现。</font></i>
<a name='L48'><b>static</b> <b>int</b>
<a name='L49'>rw_ram (<b>int</b> <a href='../R/581.html' title='Multiple refered from 9 places.'>rw</a>, <b>char</b> *<a href='../R/394.html' title='Multiple refered from 76 places.'>buf</a>, <b>int</b> <a href='../R/414.html' title='Multiple refered from 56 places.'>count</a>, off_t * pos)
<a name='L50'><font color='red'>{</font>
<a name='L51'>  <b>return</b> -<a href='../R/46.html' title='Multiple refered from 4 places.'>EIO</a>;
<a name='L52'><font color='red'>}</font>
<a name='L53'>
<a name='L54'><i><font color='green'>//// 内存数据读写操作函数。未实现。</font></i>
<a name='L55'><b>static</b> <b>int</b>
<a name='L56'>rw_mem (<b>int</b> <a href='../R/581.html' title='Multiple refered from 9 places.'>rw</a>, <b>char</b> *<a href='../R/394.html' title='Multiple refered from 76 places.'>buf</a>, <b>int</b> <a href='../R/414.html' title='Multiple refered from 56 places.'>count</a>, off_t * pos)
<a name='L57'><font color='red'>{</font>
<a name='L58'>  <b>return</b> -<a href='../R/46.html' title='Multiple refered from 4 places.'>EIO</a>;
<a name='L59'><font color='red'>}</font>
<a name='L60'>
<a name='L61'><i><font color='green'>//// 内核数据区读写函数。未实现。</font></i>
<a name='L62'><b>static</b> <b>int</b>
<a name='L63'>rw_kmem (<b>int</b> <a href='../R/581.html' title='Multiple refered from 9 places.'>rw</a>, <b>char</b> *<a href='../R/394.html' title='Multiple refered from 76 places.'>buf</a>, <b>int</b> <a href='../R/414.html' title='Multiple refered from 56 places.'>count</a>, off_t * pos)
<a name='L64'><font color='red'>{</font>
<a name='L65'>  <b>return</b> -<a href='../R/46.html' title='Multiple refered from 4 places.'>EIO</a>;
<a name='L66'><font color='red'>}</font>
<a name='L67'>
<a name='L68'><i><font color='green'>// 端口读写操作函数。</font></i>
<a name='L69'><i><font color='green'>// 参数:rw - 读写命令;buf - 缓冲区;cout - 读写字节数;pos - 端口地址。</font></i>
<a name='L70'><i><font color='green'>// 返回:实际读写的字节数。</font></i>
<a name='L71'><b>static</b> <b>int</b>
<a name='L72'>rw_port (<b>int</b> <a href='../R/581.html' title='Multiple refered from 9 places.'>rw</a>, <b>char</b> *<a href='../R/394.html' title='Multiple refered from 76 places.'>buf</a>, <b>int</b> <a href='../R/414.html' title='Multiple refered from 56 places.'>count</a>, off_t * pos)
<a name='L73'><font color='red'>{</font>
<a name='L74'>  <b>int</b> i = *<a href='../R/552.html' title='Multiple refered from 40 places.'>pos</a>;
<a name='L75'>
<a name='L76'><i><font color='green'>// 对于所要求读写的字节数,并且端口地址小于64k 时,循环执行单个字节的读写操作。</font></i>
<a name='L77'>  <b>while</b> (count-- &gt; 0 &amp;&amp; i &lt; 65536)
<a name='L78'>    <font color='red'>{</font>
<a name='L79'><i><font color='green'>// 若是读命令,则从端口i 中读取一字节内容并放到用户缓冲区中。</font></i>
<a name='L80'>      <b>if</b> (rw == READ)
<a name='L81'>        put_fs_byte (<a href='../R/499.html' title='Multiple refered from 5 places.'>inb</a> (i), <a href='../R/394.html' title='Multiple refered from 76 places.'>buf</a>++);
<a name='L82'><i><font color='green'>// 若是写命令,则从用户数据缓冲区中取一字节输出到端口i。</font></i>
<a name='L83'>      <b>else</b>
<a name='L84'>        outb (<a href='../R/479.html' title='Multiple refered from 19 places.'>get_fs_byte</a> (buf++), <a href='../R/496.html' title='Multiple refered from 373 places.'>i</a>);
<a name='L85'><i><font color='green'>// 前移一个端口。[??]</font></i>
<a name='L86'>      <a href='../R/496.html' title='Multiple refered from 373 places.'>i</a>++;
<a name='L87'>    <font color='red'>}</font>
<a name='L88'><i><font color='green'>// 计算读/写的字节数,并相应调整读写指针。</font></i>
<a name='L89'>  i -= *<a href='../R/552.html' title='Multiple refered from 40 places.'>pos</a>;
<a name='L90'>  *pos += <a href='../R/496.html' title='Multiple refered from 373 places.'>i</a>;
<a name='L91'><i><font color='green'>// 返回读/写的字节数。</font></i>
<a name='L92'>  <b>return</b> <a href='../R/496.html' title='Multiple refered from 373 places.'>i</a>;
<a name='L93'><font color='red'>}</font>
<a name='L94'>
<a name='L95'><i><font color='green'>//// 内存读写操作函数。</font></i>
<a name='L96'><b>static</b> <b>int</b>
<a name='L97'>rw_memory (<b>int</b> <a href='../R/581.html' title='Multiple refered from 9 places.'>rw</a>, <b>unsigned</b> minor, <b>char</b> *<a href='../R/394.html' title='Multiple refered from 76 places.'>buf</a>, <b>int</b> <a href='../R/414.html' title='Multiple refered from 56 places.'>count</a>, off_t * pos)
<a name='L98'><font color='red'>{</font>
<a name='L99'><i><font color='green'>// 根据内存设备子设备号,分别调用不同的内存读写函数。</font></i>
<a name='L100'>  <b>switch</b> (minor)
<a name='L101'>    <font color='red'>{</font>
<a name='L102'>    <b>case</b> 0:
<a name='L103'>      <b>return</b> rw_ram (<a href='../R/581.html' title='Multiple refered from 9 places.'>rw</a>, <a href='../R/394.html' title='Multiple refered from 76 places.'>buf</a>, <a href='../R/414.html' title='Multiple refered from 56 places.'>count</a>, <a href='../R/552.html' title='Multiple refered from 40 places.'>pos</a>);
<a name='L104'>    <b>case</b> 1:
<a name='L105'>      <b>return</b> rw_mem (<a href='../R/581.html' title='Multiple refered from 9 places.'>rw</a>, <a href='../R/394.html' title='Multiple refered from 76 places.'>buf</a>, <a href='../R/414.html' title='Multiple refered from 56 places.'>count</a>, <a href='../R/552.html' title='Multiple refered from 40 places.'>pos</a>);
<a name='L106'>    <b>case</b> 2:
<a name='L107'>      <b>return</b> rw_kmem (<a href='../R/581.html' title='Multiple refered from 9 places.'>rw</a>, <a href='../R/394.html' title='Multiple refered from 76 places.'>buf</a>, <a href='../R/414.html' title='Multiple refered from 56 places.'>count</a>, <a href='../R/552.html' title='Multiple refered from 40 places.'>pos</a>);
<a name='L108'>    <b>case</b> 3:
<a name='L109'>      <b>return</b> (rw == READ) ? 0 : <a href='../R/414.html' title='Multiple refered from 56 places.'>count</a>;  <i><font color='green'>/* rw_null */</font></i>
<a name='L110'>    <b>case</b> 4:
<a name='L111'>      <b>return</b> rw_port (<a href='../R/581.html' title='Multiple refered from 9 places.'>rw</a>, <a href='../R/394.html' title='Multiple refered from 76 places.'>buf</a>, <a href='../R/414.html' title='Multiple refered from 56 places.'>count</a>, <a href='../R/552.html' title='Multiple refered from 40 places.'>pos</a>);
<a name='L112'>    <b>default</b>:
<a name='L113'>      <b>return</b> -<a href='../R/46.html' title='Multiple refered from 4 places.'>EIO</a>;
<a name='L114'>    <font color='red'>}</font>
<a name='L115'><font color='red'>}</font>
<a name='L116'>
<a name='L117'><i><font color='green'>// 定义系统中设备种数。</font></i>
<a name='L118'><font color='darkred'>#define</font> NRDEVS ((<b>sizeof</b> (crw_table))/(<b>sizeof</b> (crw_ptr)))
<a name='L119'>
<a name='L120'><i><font color='green'>// 字符设备读写函数指针表。</font></i>
<a name='L121'><b>static</b> crw_ptr crw_table[] = <font color='red'>{</font>
<a name='L122'>  <a href='../R/149.html' title='Multiple refered from 109 places.'>NULL</a>,                         <i><font color='green'>/* nodev */</font></i><i><font color='green'>/* 无设备(空设备) */</font></i>
<a name='L123'>  rw_memory,                    <i><font color='green'>/* /dev/mem etc */</font></i><i><font color='green'>/* /dev/mem 等 */</font></i>
<a name='L124'>  <a href='../R/149.html' title='Multiple refered from 109 places.'>NULL</a>,                         <i><font color='green'>/* /dev/fd */</font></i><i><font color='green'>/* /dev/fd 软驱 */</font></i>
<a name='L125'>  <a href='../R/149.html' title='Multiple refered from 109 places.'>NULL</a>,                         <i><font color='green'>/* /dev/hd */</font></i><i><font color='green'>/* /dev/hd 硬盘 */</font></i>
<a name='L126'>  rw_ttyx,                      <i><font color='green'>/* /dev/ttyx */</font></i><i><font color='green'>/* /dev/ttyx 串口终端 */</font></i>
<a name='L127'>  rw_tty,                       <i><font color='green'>/* /dev/tty */</font></i><i><font color='green'>/* /dev/tty 终端 */</font></i>
<a name='L128'>  <a href='../R/149.html' title='Multiple refered from 109 places.'>NULL</a>,                         <i><font color='green'>/* /dev/lp */</font></i><i><font color='green'>/* /dev/lp 打印机 */</font></i>
<a name='L129'>  NULL
<a name='L130'><font color='red'>}</font>;                              <i><font color='green'>/* unnamed pipes */</font></i><i><font color='green'>/* 未命名管道 */</font></i>
<a name='L131'>
<a name='L132'><i><font color='green'>//// 字符设备读写操作函数。</font></i>
<a name='L133'><i><font color='green'>// 参数:rw - 读写命令;dev - 设备号;buf - 缓冲区;count - 读写字节数;pos -读写指针。</font></i>
<a name='L134'><i><font color='green'>// 返回:实际读/写字节数。</font></i>
<a name='L135'><b>int</b>
<a name='L136'>rw_char (<b>int</b> <a href='../R/581.html' title='Multiple refered from 9 places.'>rw</a>, <b>int</b> <a href='../R/431.html' title='Multiple refered from 110 places.'>dev</a>, <b>char</b> *<a href='../R/394.html' title='Multiple refered from 76 places.'>buf</a>, <b>int</b> <a href='../R/414.html' title='Multiple refered from 56 places.'>count</a>, off_t * pos)
<a name='L137'><font color='red'>{</font>
<a name='L138'>  crw_ptr call_addr;
<a name='L139'>
<a name='L140'><i><font color='green'>// 如果设备号超出系统设备数,则返回出错码。</font></i>
<a name='L141'>  <b>if</b> (MAJOR (dev) &gt;= NRDEVS)
<a name='L142'>    <b>return</b> -<a href='../S/13.html#L54' title='Refered from 54 in fs/ioctl.c.'>ENODEV</a>;
<a name='L143'><i><font color='green'>// 若该设备没有对应的读/写函数,则返回出错码。</font></i>
<a name='L144'>  <b>if</b> (!(call_addr = crw_table[MAJOR (dev)]))
<a name='L145'>    <b>return</b> -<a href='../S/13.html#L54' title='Refered from 54 in fs/ioctl.c.'>ENODEV</a>;
<a name='L146'><i><font color='green'>// 调用对应设备的读写操作函数,并返回实际读/写的字节数。</font></i>
<a name='L147'>  <b>return</b> call_addr (<a href='../R/581.html' title='Multiple refered from 9 places.'>rw</a>, <a href='../R/131.html' title='Multiple refered from 7 places.'>MINOR</a> (dev), <a href='../R/394.html' title='Multiple refered from 76 places.'>buf</a>, <a href='../R/414.html' title='Multiple refered from 56 places.'>count</a>, <a href='../R/552.html' title='Multiple refered from 40 places.'>pos</a>);
<a name='L148'><font color='red'>}</font>
</pre>
<hr>
<a name='BOTTOM'>
<i><font color='green'>/* [&lt;][&gt;]<a href='#L22'>[^]</a><a href='#L147'>[v]</a><a href='#TOP'>[top]</a>[bottom]<a href='../mains.html'>[index]</a><a href='../help.html'>[help]</a> */</font></i>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -