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

📄 11.htm

📁 Linux 常用C函数(中文版) html 格式
💻 HTM
📖 第 1 页 / 共 5 页
字号:
      size=2>on_exit()用来设置一个程序正常结束前调用的函数。当程序通过调用exit()或从main中返回时,参数function所指定的函数会先被调用,然后才真正由exit()结束程序。参数arg指针会传给参数function函数,详细情况请见范例。<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>如果执行成功则返回0,否则返回-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><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>void my_exit(int 
      status,void *arg)<BR>{<BR>printf(“before exit()!\n”);<BR>printf(“exit 
      (%d)\n”,status);<BR>printf(“arg = 
      %s\n”,(char*)arg);<BR>}<BR>main()<BR>{<BR>char * 
      str=”test”;<BR>on_exit(my_exit,(void 
    *)str);<BR>exit(1234);<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>before exit()!<BR>exit (1234)<BR>arg = 
      test<BR></FONT></TD></TR>
  <TR>
    <TD vAlign=top width=80>  
      <DIV align=right><BR><FONT face=宋体 size=2><A 
      name=linuxc192></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>setpgid(设置进程组识别码) </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,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>int setpgid(pid_t pid,pid_t 
  pgid);<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>setpgid()将参数pid 指定进程所属的组识别码设为参数pgid 
      指定的组识别码。如果参数pid 
    为0,则会用来设置目前进程的组识别码,如果参数pgid为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>EINVAL 参数pgid小于0。<BR>EPERM 
      进程权限不足,无法完成调用。<BR>ESRCH 找不到符合参数pid指定的进程。<BR></FONT></TD></TR>
  <TR>
    <TD vAlign=top width=80>  
      <DIV align=right><BR><FONT face=宋体 size=2><A 
      name=linuxc193></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>setpgrp(设置进程组识别码) </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,setpgid,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>int setpgrp(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>setpgrp()将目前进程所属的组识别码设为目前进程的进程识别码。此函数相当于调用setpgid(0,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><BR><FONT face=宋体 size=2><A 
      name=linuxc194></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>setpriority(设置程序进程执行优先权) </FONT></TD></TR>
  <TR>
    <TD vAlign=top width=80>
      <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD>
    <TD><FONT face=宋体 size=2>getpriority,nice<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;sys/time.h&gt;<BR>#include&lt;sys/resource.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 setpriority(int which,int who, int 
      prio);<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>setpriority()可用来设置进程、进程组和用户的进程执行优先权。参数which有三种数值,参数who 
      则依which值有不同定义<BR>which who 代表的意义<BR>PRIO_PROCESS who为进程识别码<BR>PRIO_PGRP 
      who 为进程的组识别码<BR>PRIO_USER who为用户识别码<BR>参数prio介于-20 至20 
      之间。代表进程执行优先权,数值越低代表有较高的优先次序,执行会较频繁。此优先权默认是0,而只有超级用户(root)允许降低此值。<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>执行成功则返回0,如果有错误发生返回值则为-1,错误原因存于errno。<BR>ESRCH 
      参数which或who 可能有错,而找不到符合的进程<BR>EINVAL 参数which值错误。<BR>EPERM 
      权限不够,无法完成设置<BR>EACCES 一般用户无法降低优先权<BR></FONT></TD></TR>
  <TR>
    <TD vAlign=top width=80>  
      <DIV align=right><BR><FONT face=宋体 size=2><A 
      name=linuxc195></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>system(执行shell 命令) </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,execve,waitpid,popen<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>int system(const char * string);<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>system()会调用fork()产生子进程,由子进程来调用/bin/sh-c 
      string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 
      信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。<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>如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指针(NULL),则返回非零值。如果system()调用成功则最后会返回执行shell命令后的返回值,但是此返回值也有可能为system()调用/bin/sh失败所返回的127,因此最好能再检查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>在编写具有SUID/SGID权限的程序时请勿使用system(),system()会继承环境变量,通过环境变量可能会造成系统安全的问题。<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>main()<BR>{<BR>system(“ls -al 
      /etc/passwd /etc/shadow”);<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>-r--------- 1 root root 572 Sep 2 15 :34 
      /etc/shadow<BR></FONT></TD></TR>
  <TR>
    <TD vAlign=top width=80>  
      <DIV align=right><BR><FONT face=宋体 size=2><A 
      name=linuxc196></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>wait(等待子进程中断或结束) </FONT></TD></TR>
  <TR>
    <TD vAlign=top width=80>
      <DIV align=right><FONT face=宋体 size=2>相关函数 </FONT></DIV></TD>
    <TD><FONT face=宋体 size=2>waitpid,fork<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;sys/types.h&gt;<BR>#include&lt;sys/wait.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 wait (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>wait()会暂时停止目前进程的执行,直到有信号来到或子进程结束。如果在调用wait()时子进程已经结束,则wait()会立即返回子进程结束状态值。子进程的结束状态值会由参数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>status可以设成NULL。子进程的结束状态值请参考waitpid()。<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),如果有错误发生则返回-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><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>#include&lt;unistd.h&gt;<BR>#include&lt;sys/types.h&gt;<BR>#include&lt;sys/wait.h&gt;<BR>main()<BR>{<BR>pid_t 
      pid;<BR>int status,i;<BR>if(fork()= =0){<BR>printf(“This is the child 
      process .pid 
      =%d\n”,getpid());<BR>exit(5);<BR>}else{<BR>sleep(1);<BR>printf(“This is 
      the parent process ,wait for 
      child...\n”;<BR>pid=wait(&amp;status);<BR>i=WEXITSTATUS(status);<BR>printf(“child’s 
      pid =%d .exit status=^d\n”,pid,i);<BR>}<BR>}<BR></FONT></TD></TR>
  <TR>

⌨️ 快捷键说明

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