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

📄 11.html

📁 linux下一些常用的C函数的说明和例子
💻 HTML
📖 第 1 页 / 共 5 页
字号:
  <tr> 
    <td width="80" valign="top"> 
      <div align="right"><font face='宋体' size='2'> 返回值 </font> </div>
    </td>
    <td> <font face='宋体' size='2'> 如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno 中。<br>
      </font> </td>
  </tr>
  <tr> 
    <td width="80" valign="top"> 
      <div align="right"><font face='宋体' size='2'> 错误代码 </font> </div>
    </td>
    <td> <font face='宋体' size='2'> EACCES<br>
      1. 欲执行的文件不具有用户可执行的权限。<br>
      2. 欲执行的文件所属的文件系统是以noexec 方式挂上。<br>
      3.欲执行的文件或script翻译器非一般文件。<br>
      EPERM<br>
      1.进程处于被追踪模式,执行者并不具有root权限,欲执行的文件具有SUID 或SGID 位。<br>
      2.欲执行的文件所属的文件系统是以nosuid方式挂上,欲执行的文件具有SUID 或SGID 位元,但执行者并不具有root权限。<br>
      E2BIG 参数数组过大<br>
      ENOEXEC 无法判断欲执行文件的执行文件格式,有可能是格式错误或无法在此平台执行。<br>
      EFAULT 参数filename所指的字符串地址超出可存取空间范围。<br>
      ENAMETOOLONG 参数filename所指的字符串太长。<br>
      ENOENT 参数filename字符串所指定的文件不存在。<br>
      ENOMEM 核心内存不足<br>
      ENOTDIR 参数filename字符串所包含的目录路径并非有效目录<br>
      EACCES 参数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 width="80" valign="top"> 
      <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 width="80" valign="top"> 
      <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 width="80" valign="top">  
      <div align="right"><br>
        <font face='宋体' size='2'><a name=linuxc181></a></font> </div>
    </td>
  </tr>
  <tr> 
    <td width="80" valign="top"> 
      <div align="right"><font face='宋体' size='2'> <br>
        </font> </div>
    </td>
    <td> <font face='宋体' size='2'> <br>
      execvp(执行文件) </font> </td>
  </tr>
  <tr> 
    <td width="80" valign="top"> 
      <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 width="80" valign="top"> 
      <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 width="80" valign="top"> 
      <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 width="80" valign="top"> 
      <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 width="80" valign="top"> 
      <div align="right"><font face='宋体' size='2'> 返回值 </font> </div>
    </td>
    <td> <font face='宋体' size='2'> 如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno中。<br>
      </font> </td>
  </tr>
  <tr> 
    <td width="80" valign="top"> 
      <div align="right"><font face='宋体' size='2'> 错误代码 </font> </div>
    </td>
    <td> <font face='宋体' size='2'> 请参考execve()。<br>
      </font> </td>
  </tr>
  <tr> 
    <td width="80" valign="top"> 
      <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 width="80" valign="top"> 
      <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 width="80" valign="top">  
      <div align="right"><br>
        <font face='宋体' size='2'><a name=linuxc182></a></font> </div>
    </td>
  </tr>
  <tr> 
    <td width="80" valign="top"> 
      <div align="right"><font face='宋体' size='2'> <br>
        </font> </div>
    </td>
    <td> <font face='宋体' size='2'> <br>
      exit(正常结束进程) </font> </td>
  </tr>
  <tr> 
    <td width="80" valign="top"> 
      <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 width="80" valign="top"> 
      <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 width="80" valign="top"> 
      <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 width="80" valign="top"> 
      <div align="right"><font face='宋体' size='2'> 函数说明 </font> </div>
    </td>
    <td> <font face='宋体' size='2'> exit()用来正常终结目前进程的执行,并把参数status返回给父进程,而进程所有的缓冲区数据会自动写回并关闭未关闭的文件。<br>
      </font> </td>
  </tr>
  <tr> 
    <td width="80" valign="top"> 
      <div align="right"><font face='宋体' size='2'> 返回值 </font> </div>
    </td>
    <td> <font face='宋体' size='2'> <br>
      </font> </td>
  </tr>
  <tr> 
    <td width="80" valign="top"> 
      <div align="right"><font face='宋体' size='2'> 范例 </font> </div>
    </td>
    <td> <font face='宋体' size='2'> 参考wait()<br>
      </font> </td>
  </tr>
  <tr> 
    <td width="80" valign="top">  
      <div align="right"><br>
        <font face='宋体' size='2'><a name=linuxc183></a></font> </div>
    </td>
  </tr>
  <tr> 
    <td width="80" valign="top"> 
      <div align="right"><font face='宋体' size='2'> <br>
        _ </font> </div>
    </td>
    <td> <font face='宋体' size='2'> <br>
      exit(结束进程执行) </font> </td>
  </tr>
  <tr> 
    <td width="80" valign="top"> 
      <div align="right"><font face='宋体' size='2'> 相关函数 </font> </div>
    </td>
    <td> <font face='宋体' size='2'> exit,wait,abort<br>
      </font> </td>
  </tr>
  <tr> 
    <td width="80" valign="top"> 
      <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 width="80" valign="top"> 
      <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 width="80" valign="top"> 
      <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 width="80" valign="top"> 
      <div align="right"><font face='宋体' size='2'> 返回值 </font> </div>
    </td>
    <td> <font face='宋体' size='2'> <br>
      </font> </td>
  </tr>
  <tr> 
    <td width="80" valign="top"> 
      <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 width="80" valign="top">  
      <div align="right"><br>
        <font face='宋体' size='2'><a name=linuxc184></a></font> </div>
    </td>
  </tr>
  <tr> 
    <td width="80" valign="top"> 
      <div align="right"><font face='宋体' size='2'> <br>
        </font> </div>
    </td>
    <td> <font face='宋体' size='2'> <br>
      vfork(建立一个新的进程) </font> </td>
  </tr>
  <tr> 
    <td width="80" valign="top"> 
      <div align="right"><font face='宋体' size='2'> 相关函数 </font> </div>
    </td>
    <td> <font face='宋体' size='2'> wait,execve<br>
      </font> </td>
  </tr>
  <tr> 
    <td width="80" valign="top"> 
      <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 width="80" valign="top"> 
      <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 width="80" valign="top"> 
      <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 width="80" valign="top"> 
      <div align="right"><font face='宋体' size='2'> 死锁或竞争条件的发生。 </font> </div>
    </td>
    <td> <font face='宋体' size='2'> <br>
      </font> </td>
  </tr>
  <tr> 
    <td width="80" valign="top"> 
      <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 width="80" valign="top"> 
      <div align="right"><font face='宋体' size='2'> 错误代码 </font> </div>
    </td>
    <td> <font face='宋体' size='2'> EAGAIN 内存不足。ENOMEM 内存不足,无法配置核心所需的数据结构空间。<br>
      </font> </td>
  </tr>
  <tr> 
    <td width="80" valign="top"> 
      <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 width="80" valign="top"> 
      <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 width="80" valign="top">  
      <div align="right"><br>
        <font face='宋体' size='2'><a name=linuxc185></a></font> </div>
    </td>
  </tr>
  <tr> 
    <td width="80" valign="top"> 

⌨️ 快捷键说明

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