50.html

来自「linux 0.11中文版 有注释」· HTML 代码 · 共 295 行 · 第 1/2 页

HTML
295
字号
<a name='L136'><font color='darkred'>#define</font> __NR_chroot 61
<a name='L137'><font color='darkred'>#define</font> __NR_ustat 62
<a name='L138'><font color='darkred'>#define</font> __NR_dup2 63
<a name='L139'><font color='darkred'>#define</font> __NR_getppid 64
<a name='L140'><font color='darkred'>#define</font> __NR_getpgrp 65
<a name='L141'><font color='darkred'>#define</font> __NR_setsid 66
<a name='L142'><font color='darkred'>#define</font> __NR_sigaction 67
<a name='L143'><font color='darkred'>#define</font> __NR_sgetmask 68
<a name='L144'><font color='darkred'>#define</font> __NR_ssetmask 69
<a name='L145'><font color='darkred'>#define</font> __NR_setreuid 70
<a name='L146'><font color='darkred'>#define</font> __NR_setregid 71
<a name='L147'>
<a name='L148'><i><font color='green'>// 以下定义系统调用嵌入式汇编宏函数。</font></i>
<a name='L149'><i><font color='green'>// 不带参数的系统调用宏函数。type name(void)。</font></i>
<a name='L150'><i><font color='green'>// %0 - eax(__res),%1 - eax(__NR_##name)。其中name 是系统调用的名称,与 __NR_ 组合形成上面</font></i>
<a name='L151'><i><font color='green'>// 的系统调用符号常数,从而用来对系统调用表中函数指针寻址。</font></i>
<a name='L152'><i><font color='green'>// 返回:如果返回值大于等于0,则返回该值,否则置出错号errno,并返回-1。</font></i>
<a name='L153'><font color='darkred'>#define</font> <a href='../S/88.html#L14' title='Refered from 14 in lib/setsid.c.'>_syscall0</a>(type,name) \
<a name='L154'>type name(<b>void</b>) \
<a name='L155'><font color='red'>{</font> \
<a name='L156'><b>long</b> __res; \
<a name='L157'><b>__asm__</b> <b>volatile</b> ( "int $0x80" \        <i><font color='green'>// 调用系统中断0x80。</font></i>
<a name='L158'>:"=a" (__res) \         <i><font color='green'>// 返回值??eax(__res)。</font></i>
<a name='L159'>:"" (__NR_
<a name='L160'><font color='darkred'>#</font>#name)); \                     <i><font color='green'>// 输入为系统中断调用号__NR_name。</font></i>
<a name='L161'>      <b>if</b> (__res &gt;= 0) \         <i><font color='green'>// 如果返回值&gt;=0,则直接返回该值。</font></i>
<a name='L162'>      <b>return</b> (type) __res; errno = -__res; \    <i><font color='green'>// 否则置出错号,并返回-1。</font></i>
<a name='L163'>      <b>return</b> -1;<font color='red'>}</font>
<a name='L164'>
<a name='L165'><i><font color='green'>// 有1 个参数的系统调用宏函数。type name(atype a)</font></i>
<a name='L166'><i><font color='green'>// %0 - eax(__res),%1 - eax(__NR_name),%2 - ebx(a)。</font></i>
<a name='L167'><font color='darkred'>#define</font> <a href='../R/379.html' title='Multiple refered from 2 places.'>_syscall1</a>(type,name,atype,a) \
<a name='L168'>type name(atype a) \
<a name='L169'><font color='red'>{</font> \
<a name='L170'><b>long</b> __res; \
<a name='L171'><b>__asm__</b> <b>volatile</b> ( "int $0x80" \
<a name='L172'>: "=a" (__res) \
<a name='L173'>: "" (__NR_##name), "b" ((<b>long</b>)(a))); \
<a name='L174'><b>if</b> (__res &gt;= 0) \
<a name='L175'><b>return</b> (type) __res; \
<a name='L176'>errno = -__res; \
<a name='L177'><b>return</b> -1; \
<a name='L178'><font color='red'>}</font>
<a name='L179'>
<a name='L180'><i><font color='green'>// 有2 个参数的系统调用宏函数。type name(atype a, btype b)</font></i>
<a name='L181'><i><font color='green'>// %0 - eax(__res),%1 - eax(__NR_name),%2 - ebx(a),%3 - ecx(b)。</font></i>
<a name='L182'><font color='darkred'>#define</font> _syscall2(type,name,atype,a,btype,b) \
<a name='L183'>type name(atype a,btype b) \
<a name='L184'><font color='red'>{</font> \
<a name='L185'><b>long</b> __res; \
<a name='L186'><b>__asm__</b> <b>volatile</b> ( "int $0x80" \
<a name='L187'>: "=a" (__res) \
<a name='L188'>: "" (__NR_##name), "b" ((<b>long</b>)(a)), "c" ((<b>long</b>)(b))); \
<a name='L189'><b>if</b> (__res &gt;= 0) \
<a name='L190'><b>return</b> (type) __res; \
<a name='L191'>errno = -__res; \
<a name='L192'><b>return</b> -1; \
<a name='L193'><font color='red'>}</font>
<a name='L194'>
<a name='L195'><i><font color='green'>// 有3 个参数的系统调用宏函数。type name(atype a, btype b, ctype c)</font></i>
<a name='L196'><i><font color='green'>// %0 - eax(__res),%1 - eax(__NR_name),%2 - ebx(a),%3 - ecx(b),%4 - edx(c)。</font></i>
<a name='L197'><font color='darkred'>#define</font> <a href='../R/380.html' title='Multiple refered from 2 places.'>_syscall3</a>(type,name,atype,a,btype,b,ctype,c) \
<a name='L198'>type name(atype a,btype b,ctype c) \
<a name='L199'><font color='red'>{</font> \
<a name='L200'><b>long</b> __res; \
<a name='L201'><b>__asm__</b> <b>volatile</b> ( "int $0x80" \
<a name='L202'>: "=a" (__res) \
<a name='L203'>: "" (__NR_##name), "b" ((<b>long</b>)(a)), "c" ((<b>long</b>)(b)), "d" ((<b>long</b>)(c))); \
<a name='L204'><b>if</b> (__res&gt;=0) \
<a name='L205'><b>return</b> (type) __res; \
<a name='L206'>errno=-__res; \
<a name='L207'><b>return</b> -1; \
<a name='L208'><font color='red'>}</font>
<a name='L209'>
<a name='L210'><font color='darkred'>#endif</font> <i><font color='green'>/* __LIBRARY__ */</font></i>
<a name='L211'>
<a name='L212'>      <b>extern</b> <b>int</b> errno;         <i><font color='green'>// 出错号,全局变量。</font></i>
<a name='L213'><i><font color='green'>// 对应各系统调用的函数原型定义。</font></i>
<a name='L214'>      <b>int</b> access (<b>const</b> <b>char</b> *filename, <a href='../S/45.html#L28' title='Defined at 28 in include/sys/types.h.'>mode_t</a> mode);
<a name='L215'>      <b>int</b> acct (<b>const</b> <b>char</b> *filename);
<a name='L216'>      <b>int</b> alarm (<b>int</b> sec);
<a name='L217'>      <b>int</b> brk (<b>void</b> *end_data_segment);
<a name='L218'>      <b>void</b> *sbrk (<a href='../D/918.html' title='Multiple defined in 2 places.'>ptrdiff_t</a> increment);
<a name='L219'>      <b>int</b> chdir (<b>const</b> <b>char</b> *filename);
<a name='L220'>      <b>int</b> chmod (<b>const</b> <b>char</b> *filename, <a href='../S/45.html#L28' title='Defined at 28 in include/sys/types.h.'>mode_t</a> mode);
<a name='L221'>      <b>int</b> chown (<b>const</b> <b>char</b> *filename, <a href='../S/45.html#L24' title='Defined at 24 in include/sys/types.h.'>uid_t</a> owner, <a href='../S/45.html#L25' title='Defined at 25 in include/sys/types.h.'>gid_t</a> group);
<a name='L222'>      <b>int</b> chroot (<b>const</b> <b>char</b> *filename);
<a name='L223'>      <b>int</b> close (<b>int</b> fildes);
<a name='L224'>      <b>int</b> creat (<b>const</b> <b>char</b> *filename, <a href='../S/45.html#L28' title='Defined at 28 in include/sys/types.h.'>mode_t</a> mode);
<a name='L225'>      <b>int</b> dup (<b>int</b> fildes);
<a name='L226'>      <b>int</b> execve (<b>const</b> <b>char</b> *filename, <b>char</b> **argv, <b>char</b> **envp);
<a name='L227'>      <b>int</b> execv (<b>const</b> <b>char</b> *pathname, <b>char</b> **argv);
<a name='L228'>      <b>int</b> execvp (<b>const</b> <b>char</b> *file, <b>char</b> **argv);
<a name='L229'>      <b>int</b> execl (<b>const</b> <b>char</b> *pathname, <b>char</b> *arg0, ...);
<a name='L230'>      <b>int</b> execlp (<b>const</b> <b>char</b> *file, <b>char</b> *arg0, ...);
<a name='L231'>      <b>int</b> execle (<b>const</b> <b>char</b> *pathname, <b>char</b> *arg0, ...);
<a name='L232'>      <b>volatile</b> <b>void</b> exit (<b>int</b> status);
<a name='L233'>      <b>volatile</b> <b>void</b> <a href='../S/92.html#L16' title='Defined at 16 in lib/_exit.c.'>_exit</a> (<b>int</b> status);
<a name='L234'>      <b>int</b> fcntl (<b>int</b> fildes, <b>int</b> cmd, ...);
<a name='L235'>      <b>int</b> fork (<b>void</b>);
<a name='L236'>      <b>int</b> getpid (<b>void</b>);
<a name='L237'>      <b>int</b> getuid (<b>void</b>);
<a name='L238'>      <b>int</b> geteuid (<b>void</b>);
<a name='L239'>      <b>int</b> getgid (<b>void</b>);
<a name='L240'>      <b>int</b> getegid (<b>void</b>);
<a name='L241'>      <b>int</b> ioctl (<b>int</b> fildes, <b>int</b> cmd, ...);
<a name='L242'>      <b>int</b> kill (<a href='../S/45.html#L23' title='Defined at 23 in include/sys/types.h.'>pid_t</a> pid, <b>int</b> signal);
<a name='L243'>      <b>int</b> link (<b>const</b> <b>char</b> *filename1, <b>const</b> <b>char</b> *filename2);
<a name='L244'>      <b>int</b> lseek (<b>int</b> fildes, <a href='../S/45.html#L32' title='Defined at 32 in include/sys/types.h.'>off_t</a> offset, <b>int</b> origin);
<a name='L245'>      <b>int</b> mknod (<b>const</b> <b>char</b> *filename, <a href='../S/45.html#L28' title='Defined at 28 in include/sys/types.h.'>mode_t</a> mode, <a href='../S/45.html#L26' title='Defined at 26 in include/sys/types.h.'>dev_t</a> dev);
<a name='L246'>      <b>int</b> mount (<b>const</b> <b>char</b> *specialfile, <b>const</b> <b>char</b> *dir, <b>int</b> rwflag);
<a name='L247'>      <b>int</b> nice (<b>int</b> val);
<a name='L248'>      <b>int</b> <a href='../S/87.html#L19' title='Defined at 19 in lib/open.c.'>open</a> (<b>const</b> <b>char</b> *filename, <b>int</b> flag, ...);
<a name='L249'>      <b>int</b> pause (<b>void</b>);
<a name='L250'>      <b>int</b> pipe (<b>int</b> *fildes);
<a name='L251'>      <b>int</b> read (<b>int</b> fildes, <b>char</b> *buf, <a href='../S/45.html#L32' title='Defined at 32 in include/sys/types.h.'>off_t</a> count);
<a name='L252'>      <b>int</b> setpgrp (<b>void</b>);
<a name='L253'>      <b>int</b> setpgid (<a href='../S/45.html#L23' title='Defined at 23 in include/sys/types.h.'>pid_t</a> pid, <a href='../S/45.html#L23' title='Defined at 23 in include/sys/types.h.'>pid_t</a> pgid);
<a name='L254'>      <b>int</b> setuid (<a href='../S/45.html#L24' title='Defined at 24 in include/sys/types.h.'>uid_t</a> uid);
<a name='L255'>      <b>int</b> setgid (<a href='../S/45.html#L25' title='Defined at 25 in include/sys/types.h.'>gid_t</a> gid);
<a name='L256'>      <b>void</b> (*signal (<b>int</b> sig, <b>void</b> (*fn) (<b>int</b>))) (<b>int</b>);
<a name='L257'>      <b>int</b> stat (<b>const</b> <b>char</b> *filename, <b>struct</b> stat *stat_buf);
<a name='L258'>      <b>int</b> fstat (<b>int</b> fildes, <b>struct</b> stat *stat_buf);
<a name='L259'>      <b>int</b> stime (<a href='../D/1080.html' title='Multiple defined in 2 places.'>time_t</a> * tptr);
<a name='L260'>      <b>int</b> sync (<b>void</b>);
<a name='L261'>      <a href='../D/1080.html' title='Multiple defined in 2 places.'>time_t</a> time (<a href='../D/1080.html' title='Multiple defined in 2 places.'>time_t</a> * tloc);
<a name='L262'>      <a href='../D/1080.html' title='Multiple defined in 2 places.'>time_t</a> times (<b>struct</b> tms *tbuf);
<a name='L263'>      <b>int</b> ulimit (<b>int</b> cmd, <b>long</b> limit);
<a name='L264'>      <a href='../S/45.html#L28' title='Defined at 28 in include/sys/types.h.'>mode_t</a> umask (<a href='../S/45.html#L28' title='Defined at 28 in include/sys/types.h.'>mode_t</a> mask);
<a name='L265'>      <b>int</b> umount (<b>const</b> <b>char</b> *specialfile);
<a name='L266'>      <b>int</b> uname (<b>struct</b> utsname *name);
<a name='L267'>      <b>int</b> unlink (<b>const</b> <b>char</b> *filename);
<a name='L268'>      <b>int</b> ustat (<a href='../S/45.html#L26' title='Defined at 26 in include/sys/types.h.'>dev_t</a> dev, <b>struct</b> ustat *ubuf);
<a name='L269'>      <b>int</b> utime (<b>const</b> <b>char</b> *filename, <b>struct</b> utimbuf *times);
<a name='L270'>      <a href='../S/45.html#L23' title='Defined at 23 in include/sys/types.h.'>pid_t</a> waitpid (<a href='../S/45.html#L23' title='Defined at 23 in include/sys/types.h.'>pid_t</a> pid, <b>int</b> *wait_stat, <b>int</b> options);
<a name='L271'>      <a href='../S/45.html#L23' title='Defined at 23 in include/sys/types.h.'>pid_t</a> wait (<b>int</b> *wait_stat);
<a name='L272'>      <b>int</b> write (<b>int</b> fildes, <b>const</b> <b>char</b> *buf, <a href='../S/45.html#L32' title='Defined at 32 in include/sys/types.h.'>off_t</a> count);
<a name='L273'>      <b>int</b> dup2 (<b>int</b> oldfd, <b>int</b> newfd);
<a name='L274'>      <b>int</b> getppid (<b>void</b>); <a href='../S/45.html#L23' title='Defined at 23 in include/sys/types.h.'>pid_t</a> getpgrp (<b>void</b>); <a href='../S/45.html#L23' title='Defined at 23 in include/sys/types.h.'>pid_t</a> setsid (<b>void</b>);
<a name='L275'><font color='darkred'>#endif</font>
</pre>
<hr>
<a name='BOTTOM'>
<i><font color='green'>/* [&lt;][&gt;][^][v]<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 + -
显示快捷键?