87.html

来自「linux 0.11中文版 有注释」· HTML 代码 · 共 61 行

HTML
61
字号
<html>
<head>
<title>lib/open.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/108.html'>lib</a>/open.c</h2>
<i><font color='green'>/* [&lt;][&gt;]<a href='#L19'>[^]</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='#L19' title='Defined at 19.'>open</a>
</ol>
<hr>
<pre>
<a name='L1'><i><font color='green'>/*</font></i>
<a name='L2'><i><font color='green'>* linux/lib/open.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'>#define</font> <a href='../S/50.html#L71' title='Refered from 71 in include/unistd.h.'>__LIBRARY__</a>
<a name='L8'><font color='darkred'>#include</font> &lt;<a href='50.html'>unistd.h</a>&gt;             <i><font color='green'>// Linux 标准头文件。定义了各种符号常数和类型,并申明了各种函数。</font></i>
<a name='L9'><i><font color='green'>// 如定义了__LIBRARY__,则还包括系统调用号和内嵌汇编_syscall0()等。</font></i>
<a name='L10'><font color='darkred'>#include</font> &lt;<a href='40.html'>stdarg.h</a>&gt;             <i><font color='green'>// 标准参数头文件。以宏的形式定义变量参数列表。主要说明了-个</font></i>
<a name='L11'><i><font color='green'>// 类型(va_list)和三个宏(va_start, va_arg 和va_end),用于</font></i>
<a name='L12'><i><font color='green'>// vsprintf、vprintf、vfprintf 函数。</font></i>
<a name='L13'>
<a name='L14'><i><font color='green'>//// 打开文件函数。</font></i>
<a name='L15'><i><font color='green'>// 打开并有可能创建一个文件。</font></i>
<a name='L16'><i><font color='green'>// 参数:filename - 文件名;flag - 文件打开标志;...</font></i>
<a name='L17'><i><font color='green'>// 返回:文件描述符,若出错则置出错码,并返回-1。</font></i>
<a name='L18'><b>int</b>
<a name='L19'><a href='../R/542.html' title='Multiple refered from 8 places.'>open</a> (<b>const</b> <b>char</b> *filename, <b>int</b> flag, ...)
<a name='L20'><font color='red'>{</font>
<a name='L21'>  <b>register</b> <b>int</b> res;
<a name='L22'>  <a href='../S/40.html#L4' title='Defined at 4 in include/stdarg.h.'>va_list</a> arg;
<a name='L23'>
<a name='L24'><i><font color='green'>// 利用va_start()宏函数,取得flag 后面参数的指针,然后调用系统中断int 0x80,功能open 进行</font></i>
<a name='L25'><i><font color='green'>// 文件打开操作。</font></i>
<a name='L26'><i><font color='green'>// %0 - eax(返回的描述符或出错码);%1 - eax(系统中断调用功能号__NR_open);</font></i>
<a name='L27'><i><font color='green'>// %2 - ebx(文件名filename);%3 - ecx(打开文件标志flag);%4 - edx(后随参数文件属性mode)。</font></i>
<a name='L28'>  <a href='../D/1107.html' title='Multiple defined in 2 places.'>va_start</a> (arg, flag);
<a name='L29'><b>__asm__</b> ("int $0x80": "=a" (res):"" (<a href='../S/50.html#L80' title='Defined at 80 in include/unistd.h.'>__NR_open</a>), "b" (filename), "c" (flag),
<a name='L30'>           "d" (<a href='../S/40.html#L40' title='Defined at 40 in include/stdarg.h.'>va_arg</a> (arg, <b>int</b>)));
<a name='L31'><i><font color='green'>// 系统中断调用返回值大于或等于0,表示是一个文件描述符,则直接返回之。</font></i>
<a name='L32'>  <b>if</b> (res &gt;= 0)
<a name='L33'>    <b>return</b> res;
<a name='L34'><i><font color='green'>// 否则说明返回值小于0,则代表一个出错码。设置该出错码并返回-1。</font></i>
<a name='L35'>  errno = -res;
<a name='L36'>  <b>return</b> -1;
<a name='L37'><font color='red'>}</font>
</pre>
<hr>
<a name='BOTTOM'>
<i><font color='green'>/* [&lt;][&gt;][^]<a href='#L19'>[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 + =
减小字号Ctrl + -
显示快捷键?