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

📄 13.html

📁 linux下一些常用的C函数的说明和例子
💻 HTML
📖 第 1 页 / 共 4 页
字号:
<html>
<head>
<title>Untitled Document</title>
</head>
<body>
<table width="100%">
  <tr> 
    <td width="80" valign="top">  
      <div align="right"><br>
        <font face='宋体' size='2'><a name=linuxc242></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>
      alarm(设置信号传送闹钟) </font> </td>
  </tr>
  <tr> 
    <td width="80" valign="top"> 
      <div align="right"><font face='宋体' size='2'> 相关函数 </font> </div>
    </td>
    <td> <font face='宋体' size='2'> signal,sleep<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'> unsigned int alarm(unsigned int seconds);<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'> alarm()用来设置信号SIGALRM在经过参数seconds指定的秒数后传送给目前的进程。如果参数seconds 
      为0,则之前设置的闹钟会被取消,并将剩下的时间返回。<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'> 返回之前闹钟的剩余秒数,如果之前未设闹钟则返回0。<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>
      #include&lt;signal.h&gt;<br>
      void handler() {<br>
      printf(“hello\n”);<br>
      }<br>
      main()<br>
      {<br>
      int i;<br>
      signal(SIGALRM,handler);<br>
      alarm(5);<br>
      for(i=1;i&lt;7;i++){<br>
      printf(“sleep %d ...\n”,i);<br>
      sleep(1);<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'> sleep 1 ...<br>
      sleep 2 ...<br>
      sleep 3 ...<br>
      sleep 4 ...<br>
      sleep 5 ...<br>
      hello<br>
      sleep 6 ...<br>
      </font> </td>
  </tr>
  <tr> 
    <td width="80" valign="top">  
      <div align="right"><br>
        <font face='宋体' size='2'><a name=linuxc243></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>
      kill(传送信号给指定的进程) </font> </td>
  </tr>
  <tr> 
    <td width="80" valign="top"> 
      <div align="right"><font face='宋体' size='2'> 相关函数 </font> </div>
    </td>
    <td> <font face='宋体' size='2'> raise,signal<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;sys/types.h&gt;<br>
      #include&lt;signal.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 kill(pid_t pid,int sig);<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'> kill()可以用来送参数sig指定的信号给参数pid指定的进程。参数pid有几种情况:<br>
      pid&gt;0 将信号传给进程识别码为pid 的进程。<br>
      pid=0 将信号传给和目前进程相同进程组的所有进程<br>
      pid=-1 将信号广播传送给系统内所有的进程<br>
      pid&lt;0 将信号传给进程组识别码为pid绝对值的所有进程<br>
      参数sig代表的信号编号可参考附录D<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'> 执行成功则返回0,如果有错误则返回-1。<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'> EINVAL 参数sig 不合法<br>
      ESRCH 参数pid 所指定的进程或进程组不存在<br>
      EPERM 权限不够无法传送信号给指定进程<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>
      #include&lt;signal.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;<br>
      if(!(pid= fork())){<br>
      printf(“Hi I am child process!\n”);<br>
      sleep(10);<br>
      return;<br>
      }<br>
      else{<br>
      printf(“send signal to child process (%d) \n”,pid);<br>
      sleep(1);<br>
      kill(pid ,SIGABRT);<br>
      wait(&status);<br>
      if(WIFSIGNALED(status))<br>
      printf(“chile process receive signal %d\n”,WTERMSIG(status));<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'> sen signal to child process(3170)<br>
      Hi I am child process!<br>
      child process receive signal 6<br>
      </font> </td>
  </tr>
  <tr> 
    <td width="80" valign="top">  
      <div align="right"><br>
        <font face='宋体' size='2'><a name=linuxc244></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>
      pause(让进程暂停直到信号出现) </font> </td>
  </tr>
  <tr> 
    <td width="80" valign="top"> 
      <div align="right"><font face='宋体' size='2'> 相关函数 </font> </div>
    </td>
    <td> <font face='宋体' size='2'> kill,signal,sleep<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 pause(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'> pause()会令目前的进程暂停(进入睡眠状态),直到被信号(signal)所中断。<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。<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'> EINTR 有信号到达中断了此函数。<br>
      </font> </td>
  </tr>
  <tr> 
    <td width="80" valign="top">  
      <div align="right"><br>
        <font face='宋体' size='2'><a name=linuxc245></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>
      sigaction(查询或设置信号处理方式) </font> </td>
  </tr>
  <tr> 
    <td width="80" valign="top"> 
      <div align="right"><font face='宋体' size='2'> 相关函数 </font> </div>
    </td>
    <td> <font face='宋体' size='2'> signal,sigprocmask,sigpending,sigsuspend<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;signal.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 sigaction(int signum,const struct sigaction 
      *act ,struct sigaction *oldact);<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'> sigaction()会依参数signum指定的信号编号来设置该信号的处理函数。参数signum可以指定SIGKILL和SIGSTOP以外的所有信号。<br>
      如参数结构sigaction定义如下<br>
      struct sigaction<br>
      {<br>
      void (*sa_handler) (int);<br>
      sigset_t sa_mask;<br>
      int sa_flags;<br>
      void (*sa_restorer) (void);<br>
      }<br>
      sa_handler此参数和signal()的参数handler相同,代表新的信号处理函数,其他意义请参考signal()。<br>
      sa_mask 用来设置在处理该信号时暂时将sa_mask 指定的信号搁置。<br>
      sa_restorer 此参数没有使用。<br>
      sa_flags 用来设置信号处理的其他相关操作,下列的数值可用。<br>
      OR 运算(|)组合<br>
      A_NOCLDSTOP : 如果参数signum为SIGCHLD,则当子进程暂停时并不会通知父进程<br>
      SA_ONESHOT/SA_RESETHAND:当调用新的信号处理函数前,将此信号处理方式改为系统预设的方式。<br>
      SA_RESTART:被信号中断的系统调用会自行重启<br>
      SA_NOMASK/SA_NODEFER:在处理此信号未结束前不理会此信号的再次到来。<br>
      如果参数oldact不是NULL指针,则原来的信号处理方式会由此结构sigaction 返回。<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'> 执行成功则返回0,如果有错误则返回-1。<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'> EINVAL 参数signum 不合法, 或是企图拦截SIGKILL/SIGSTOPSIGKILL信号<br>
      EFAULT 参数act,oldact指针地址无法存取。<br>
      EINTR 此调用被中断<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>
      #include&lt;signal.h&gt;<br>
      void show_handler(struct sigaction * act)<br>
      {<br>
      switch (act-&gt;sa_flags)<br>
      {<br>
      case SIG_DFL:printf(“Default action\n”);break;<br>
      case SIG_IGN:printf(“Ignore the signal\n”);break;<br>
      default: printf(“0x%x\n”,act-&gt;sa_handler);<br>
      }<br>
      }<br>
      main()<br>
      {<br>
      int i;<br>
      struct sigaction act,oldact;<br>
      act.sa_handler = show_handler;<br>
      act.sa_flags = SA_ONESHOT|SA_NOMASK;<br>
      sigaction(SIGUSR1,&act,&oldact);<br>
      for(i=5;i&lt;15;i++)<br>
      {<br>
      printf(“sa_handler of signal %2d =”.i);<br>
      sigaction(i,NULL,&oldact);<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'> sa_handler of signal 5 = Default action<br>

⌨️ 快捷键说明

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