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

📄 11.htm

📁 Linux系统函数用法的详细介绍
💻 HTM
📖 第 1 页 / 共 5 页
字号:
      参数filename字符串所包含的目录路径无法存取,权限不足<BR>ELOOP 过多的符号连接<BR>ETXTBUSY       欲执行的文件已被其他进程打开而且正把数据写入该文件中<BR>EIO I/O 存取错误<BR>ENFILE       已达到系统所允许的打开文件总数。<BR>EMFILE 已达到系统所允许单一进程所能打开的文件总数。<BR>EINVAL       欲执行文件的ELF执行格式不只一个PT_INTERP节区<BR>EISDIR ELF翻译器为一目录<BR>ELIBBAD       ELF翻译器有问题。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>范例 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>#include&lt;unistd.h&gt;<BR>main()<BR>{<BR>char *       argv[ ]={“ls”,”-al”,”/etc/passwd”,(char *)0};<BR>char * envp[       ]={“PATH=/bin”,0}<BR>execve(“/bin/ls”,argv,envp);<BR>}<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>执行 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>-rw-r--r-- 1 root root 705 Sep 3 13 :52       /etc/passwd<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>        <DIV align=right><BR><FONT face=宋体 size=2><A       name=linuxc181></A></FONT></DIV></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD>    <TD><FONT face=宋体 size=2><BR>execvp(执行文件) </FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD>    <TD><FONT face=宋体     size=2>fork,execl,execle,execlp,execv,execve<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>表头文件 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>#include&lt;unistd.h&gt;<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>定义函数 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>int execvp(const char *file ,char * const argv       []);<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>函数说明 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>execvp()会从PATH 环境变量所指的目录中查找符合参数file       的文件名,找到后便执行该文件,然后将第二个参数argv传给该欲执行的文件。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>返回值 </FONT></DIV></TD>    <TD><FONT face=宋体     size=2>如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno中。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>错误代码 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>请参考execve()。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>范例 </FONT></DIV></TD>    <TD><FONT face=宋体       size=2>/*请与execlp()范例对照*/<BR>#include&lt;unistd.h&gt;<BR>main()<BR>{<BR>char       * argv[ ] ={       “ls”,”-al”,”/etc/passwd”,0};<BR>execvp(“ls”,argv);<BR>}<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>执行 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>-rw-r--r-- 1 root root 705 Sep 3 13 :52       /etc/passwd<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>        <DIV align=right><BR><FONT face=宋体 size=2><A       name=linuxc182></A></FONT></DIV></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD>    <TD><FONT face=宋体 size=2><BR>exit(正常结束进程) </FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>_exit,atexit,on_exit<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>表头文件 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>#include&lt;stdlib.h&gt;<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>定义函数 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>void exit(int status);<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>函数说明 </FONT></DIV></TD>    <TD><FONT face=宋体       size=2>exit()用来正常终结目前进程的执行,并把参数status返回给父进程,而进程所有的缓冲区数据会自动写回并关闭未关闭的文件。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>返回值 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2><BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>范例 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>参考wait()<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>        <DIV align=right><BR><FONT face=宋体 size=2><A       name=linuxc183></A></FONT></DIV></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2><BR>_ </FONT></DIV></TD>    <TD><FONT face=宋体 size=2><BR>exit(结束进程执行) </FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>exit,wait,abort<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>表头文件 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>#include&lt;unistd.h&gt;<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>定义函数 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>void _exit(int status);<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>函数说明 </FONT></DIV></TD>    <TD><FONT face=宋体       size=2>_exit()用来立刻结束目前进程的执行,并把参数status返回给父进程,并关闭未关闭的文件。此函数调用后不会返回,并且会传递SIGCHLD信号给父进程,父进程可以由wait函数取得子进程结束状态。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>返回值 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2><BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>附加说明 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>_exit()不会处理标准I/O     缓冲区,如要更新缓冲区请使用exit()。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>        <DIV align=right><BR><FONT face=宋体 size=2><A       name=linuxc184></A></FONT></DIV></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD>    <TD><FONT face=宋体 size=2><BR>vfork(建立一个新的进程) </FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>wait,execve<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>表头文件 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>#include&lt;unistd.h&gt;<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>定义函数 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>pid_t vfork(void);<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>函数说明 </FONT></DIV></TD>    <TD><FONT face=宋体       size=2>vfork()会产生一个新的子进程,其子进程会复制父进程的数据与堆栈空间,并继承父进程的用户代码,组代码,环境变量、已打开的文件代码、工作目录和资源限制等。Linux       使用copy-on-write(COW)技术,只有当其中一进程试图修改欲复制的空间时才会做真正的复制动作,由于这些继承的信息是复制而来,并非指相同的内存空间,因此子进程对这些变量的修改和父进程并不会同步。此外,子进程不会继承父进程的文件锁定和未处理的信号。注意,Linux不保证子进程会比父进程先执行或晚执行,因此编写程序时要留意<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>死锁或竞争条件的发生。 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2><BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>返回值 </FONT></DIV></TD>    <TD><FONT face=宋体       size=2>如果vfork()成功则在父进程会返回新建立的子进程代码(PID),而在新建立的子进程中则返回0。如果vfork       失败则直接返回-1,失败原因存于errno中。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>错误代码 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>EAGAIN 内存不足。ENOMEM       内存不足,无法配置核心所需的数据结构空间。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>范例 </FONT></DIV></TD>    <TD><FONT face=宋体       size=2>#include&lt;unistd.h&gt;<BR>main()<BR>{<BR>if(vfork() =       =0)<BR>{<BR>printf(“This is the child       process\n”);<BR>}else{<BR>printf(“This is the parent       process\n”);<BR>}<BR>}<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>执行 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>this is the parent process<BR>this is the child       process<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>        <DIV align=right><BR><FONT face=宋体 size=2><A       name=linuxc185></A></FONT></DIV></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2><BR></FONT></DIV></TD>    <TD><FONT face=宋体 size=2><BR>getpgid(取得进程组识别码) </FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>setpgid,setpgrp,getpgrp<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>表头文件 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>#include&lt;unistd.h&gt;<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>定义函数 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>pid_t getpgid( pid_t pid);<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>函数说明 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>getpgid()用来取得参数pid       指定进程所属的组识别码。如果参数pid为0,则会取得目前进程的组识别码。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>返回值 </FONT></DIV></TD>    <TD><FONT face=宋体   size=2>执行成功则返回组识别码,如果有错误则返回-1,错误原因存于errno中。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>错误代码 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>ESRCH 找不到符合参数pid 指定的进程。<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>范例 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>/*取得init       进程(pid=1)的组识别码*/<BR>#include&lt;unistd.h&gt;<BR>mian()<BR>{<BR>printf(“init       gid = %d\n”,getpgid(1));<BR>}<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>      <DIV align=right><FONT face=宋体 size=2>执行 </FONT></DIV></TD>    <TD><FONT face=宋体 size=2>init gid = 0<BR></FONT></TD></TR>  <TR>    <TD vAlign=top width=80>        <DIV align=right><BR><FONT face=宋体 size=2><A 

⌨️ 快捷键说明

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