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

📄 13.html

📁 linux 0.11中文版 有注释
💻 HTML
字号:
<html>
<head>
<title>fs/ioctl.c</title>
<meta name='robots' content='noindex,nofollow'>
<meta name='generator' content='GLOBAL-5.4.1'>
</head>
<body text='#191970' bgcolor='#f5f5dc' vlink='gray'>
<a name='TOP'><h2><a href='../mains.html'>root</a>/<a href='../files/98.html'>fs</a>/ioctl.c</h2>
<i><font color='green'>/* [&lt;][&gt;]<a href='#L39'>[^]</a>[v][top]<a href='#BOTTOM'>[bottom]</a><a href='../mains.html'>[index]</a><a href='../help.html'>[help]</a> */</font></i>
<hr>
<h2>DEFINITIONS</h2>
This source file includes following definitions.
<ol>
<li><a href='#L39' title='Defined at 39.'>sys_ioctl</a>
</ol>
<hr>
<pre>
<a name='L1'><i><font color='green'>/*</font></i>
<a name='L2'><i><font color='green'>* linux/fs/ioctl.c</font></i>
<a name='L3'><i><font color='green'>*</font></i>
<a name='L4'><i><font color='green'>* (C) 1991 Linus Torvalds</font></i>
<a name='L5'><i><font color='green'>*/</font></i>
<a name='L6'>
<a name='L7'><font color='darkred'>#include</font> &lt;<a href='42.html'>string.h</a>&gt;             <i><font color='green'>// 字符串头文件。主要定义了一些有关字符串操作的嵌入函数。</font></i>
<a name='L8'><font color='darkred'>#include</font> &lt;<a href='28.html'>errno.h</a>&gt;              <i><font color='green'>// 错误号头文件。包含系统中各种出错号。(Linus 从minix 中引进的)。</font></i>
<a name='L9'><font color='darkred'>#include</font> &lt;<a href='43.html'>sys/stat.h</a>&gt;           <i><font color='green'>// 文件状态头文件。含有文件或文件系统状态结构stat{}和常量。</font></i>
<a name='L10'>
<a name='L11'><font color='darkred'>#include</font> &lt;<a href='36.html'>linux/sched.h</a>&gt;        <i><font color='green'>// 调度程序头文件,定义了任务结构task_struct、初始任务0 的数据,</font></i>
<a name='L12'><i><font color='green'>// 还有一些有关描述符参数设置和获取的嵌入式汇编函数宏语句。</font></i>
<a name='L13'>
<a name='L14'><b>extern</b> <b>int</b> <a href='../S/66.html#L171' title='Defined at 171 in kernel/chr_drv/tty_ioctl.c.'>tty_ioctl</a> (<b>int</b> dev, <b>int</b> cmd, <b>int</b> arg);       <i><font color='green'>// 终端ioctl(chr_drv/tty_ioctl.c, 115)。</font></i>
<a name='L15'>
<a name='L16'><i><font color='green'>// 定义输入输出控制(ioctl)函数指针。</font></i>
<a name='L17'><b>typedef</b> <b>int</b> (*ioctl_ptr) (<b>int</b> dev, <b>int</b> cmd, <b>int</b> arg);
<a name='L18'>
<a name='L19'><i><font color='green'>// 定义系统中设备种数。</font></i>
<a name='L20'><font color='darkred'>#define</font> <a href='../S/13.html#L53' title='Refered from 53 in fs/ioctl.c.'>NRDEVS</a> ((<b>sizeof</b> (ioctl_table))/(<b>sizeof</b> (ioctl_ptr)))
<a name='L21'>
<a name='L22'><i><font color='green'>// ioctl 操作函数指针表。</font></i>
<a name='L23'><b>static</b> ioctl_ptr ioctl_table[] = <font color='red'>{</font>
<a name='L24'>  <a href='../D/261.html' title='Multiple defined in 12 places.'>NULL</a>,                         <i><font color='green'>/* nodev */</font></i>
<a name='L25'>  <a href='../D/261.html' title='Multiple defined in 12 places.'>NULL</a>,                         <i><font color='green'>/* /dev/mem */</font></i>
<a name='L26'>  <a href='../D/261.html' title='Multiple defined in 12 places.'>NULL</a>,                         <i><font color='green'>/* /dev/fd */</font></i>
<a name='L27'>  <a href='../D/261.html' title='Multiple defined in 12 places.'>NULL</a>,                         <i><font color='green'>/* /dev/hd */</font></i>
<a name='L28'>  <a href='../S/66.html#L171' title='Defined at 171 in kernel/chr_drv/tty_ioctl.c.'>tty_ioctl</a>,                    <i><font color='green'>/* /dev/ttyx */</font></i>
<a name='L29'>  <a href='../S/66.html#L171' title='Defined at 171 in kernel/chr_drv/tty_ioctl.c.'>tty_ioctl</a>,                    <i><font color='green'>/* /dev/tty */</font></i>
<a name='L30'>  <a href='../D/261.html' title='Multiple defined in 12 places.'>NULL</a>,                         <i><font color='green'>/* /dev/lp */</font></i>
<a name='L31'>  <a href='../D/261.html' title='Multiple defined in 12 places.'>NULL</a>
<a name='L32'><font color='red'>}</font>;                              <i><font color='green'>/* named pipes */</font></i>
<a name='L33'>
<a name='L34'>
<a name='L35'><i><font color='green'>//// 系统调用函数 - 输入输出控制函数。</font></i>
<a name='L36'><i><font color='green'>// 参数:fd - 文件描述符;cmd - 命令码;arg - 参数。</font></i>
<a name='L37'><i><font color='green'>// 返回:成功则返回0,否则返回出错码。</font></i>
<a name='L38'><b>int</b>
<a name='L39'><a href='../R/653.html' title='Multiple refered from 2 places.'>sys_ioctl</a> (<b>unsigned</b> <b>int</b> fd, <b>unsigned</b> <b>int</b> cmd, <b>unsigned</b> <b>long</b> arg)
<a name='L40'><font color='red'>{</font>
<a name='L41'>  <b>struct</b> file *filp;
<a name='L42'>  <b>int</b> <a href='../S/7.html#L136' title='Defined at 136 in fs/char_dev.c.'>dev</a>, mode;
<a name='L43'>
<a name='L44'><i><font color='green'>// 如果文件描述符超出可打开的文件数,或者对应描述符的文件结构指针为空,则返回出错码,退出。</font></i>
<a name='L45'>  <b>if</b> (fd &gt;= <a href='../S/31.html#L59' title='Defined at 59 in include/linux/fs.h.'>NR_OPEN</a> || !(filp = current-&gt;filp[fd]))
<a name='L46'>    <b>return</b> -<a href='../S/28.html#L38' title='Defined at 38 in include/errno.h.'>EBADF</a>;
<a name='L47'><i><font color='green'>// 取对应文件的属性。如果该文件不是字符文件,也不是块设备文件,则返回出错码,退出。</font></i>
<a name='L48'>  mode = filp-&gt;f_inode-&gt;i_mode;
<a name='L49'>  <b>if</b> (!<a href='../S/43.html#L36' title='Defined at 36 in include/sys/stat.h.'>S_ISCHR</a> (mode) &amp;&amp; !<a href='../S/43.html#L37' title='Defined at 37 in include/sys/stat.h.'>S_ISBLK</a> (mode))
<a name='L50'>    <b>return</b> -<a href='../S/28.html#L51' title='Defined at 51 in include/errno.h.'>EINVAL</a>;
<a name='L51'><i><font color='green'>// 从字符或块设备文件的i 节点中取设备号。如果设备号大于系统现有的设备数,则返回出错号。</font></i>
<a name='L52'>  <a href='../S/7.html#L136' title='Defined at 136 in fs/char_dev.c.'>dev</a> = filp-&gt;f_inode-&gt;i_zone[0];
<a name='L53'>  <b>if</b> (<a href='../S/31.html#L49' title='Defined at 49 in include/linux/fs.h.'>MAJOR</a> (<a href='../S/7.html#L136' title='Defined at 136 in fs/char_dev.c.'>dev</a>) &gt;= <a href='../S/13.html#L20' title='Defined at 20 in fs/ioctl.c.'>NRDEVS</a>)
<a name='L54'>    <b>return</b> -<a href='../D/99.html' title='Multiple defined in 3 places.'>ENODEV</a>;
<a name='L55'><i><font color='green'>// 如果该设备在ioctl 函数指针表中没有对应函数,则返回出错码。</font></i>
<a name='L56'>  <b>if</b> (!ioctl_table[<a href='../S/31.html#L49' title='Defined at 49 in include/linux/fs.h.'>MAJOR</a> (<a href='../S/7.html#L136' title='Defined at 136 in fs/char_dev.c.'>dev</a>)])
<a name='L57'>    <b>return</b> -<a href='../S/28.html#L54' title='Defined at 54 in include/errno.h.'>ENOTTY</a>;
<a name='L58'><i><font color='green'>// 否则返回实际ioctl 函数返回码,成功则返回0,否则返回出错码。</font></i>
<a name='L59'>  <b>return</b> ioctl_table[<a href='../S/31.html#L49' title='Defined at 49 in include/linux/fs.h.'>MAJOR</a> (<a href='../S/7.html#L136' title='Defined at 136 in fs/char_dev.c.'>dev</a>)] (<a href='../S/7.html#L136' title='Defined at 136 in fs/char_dev.c.'>dev</a>, cmd, arg);
<a name='L60'><font color='red'>}</font>
</pre>
<hr>
<a name='BOTTOM'>
<i><font color='green'>/* [&lt;][&gt;][^]<a href='#L39'>[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 + -