计算机二级C 辅导:sleep与alarm计算机二级考试

文章作者 100test 发表时间 2009:05:20 12:27:35
来源 100Test.Com百考试题网


  2009年下半年全国计算机等级考试你准备好了没?考计算机等级考试的朋友,2009年下半年全国计算机等级考试时间是2009年9月19日至23日。更多优质资料尽在百考试题论坛 百考试题在线题库
  sleep函数:
  #include <.unistd.h>.
  unsigned int sleep(unsigned int seconds).
  此函数使调用进程被挂起,直到满足以下条件之一:
  1)已经过了seconds所指定的墙上时钟时间
  2)调用进程捕捉到一个信号并从信号处理程序返回
  注:由于其他系统活动,实际返回时间比所要求的会迟一些,像alarm一样。
  sleep的返回值:
  1)在上述第一种情形中,返回值是0
  2)当由于捕捉到某个信号sleep提前返回时,返回值是未睡够的时间(所要求的时间减去实际休眠时间)
  看看下面的例子,猜猜sleep()的返回值是多少
  1 #include <.stdio.h>.
  2 #include <.time.h>.
  3 #include <.signal.h>.
  4
  5 #define DIAPAUSE 30    //sleep time 30s
  6 #define TIMEOUT 5
  7
  8 void sigalrm(int signo).
  9
  10 int main()
  11 {
  12         struct sigaction sa.
  13
  14         sa.sa_handler = sigalrm.
  15         sa.sa_flags = 0.
  16         sigemptyset(&.sa.sa_mask).
  17         if(sigaction(SIGALRM, &.sa, NULL) <. 0)
  18         {
  19                 printf("sigaction error!\n").
  20                 return.
  21         }
  22
  23         while(1)
  24         {
  25                 printf("alarm(TIMEOUT)...\n").
  26                 alarm(TIMEOUT).
  27                 printf("...\n").
  28                 printf("sleep(DIAPAUSE) == %d\n", sleep(DIAPAUSE)).
  29         }
  30
  31         return 0.
  32 }
  33
  34 void sigalrm(int signo)
  35 {
  36         printf("timeout...\n").
  37         return.
  38 }
  sleep函数的返回值是25。
  如果将TIMEOUT的值改为大于DIAPAUSE的值,如50的话,sleep函数在睡够了DIAPAUSE后就会返回,返回值为0。
  如果我们即需要alarm又需要sleep一个预订的事件怎么办?如上面的例子,我想在...后再sleep 30s然后再进入循环。这在socket通讯过程中,在设置超时的时候可能会用到。
  注意到alarm函数。
  #include <.unistd.h>.
  unsigned int alarm(unsigned int senconds).
  使用alarm函数可以设置一个计时器,在将来某个指定的时间该计时器会超时。当计时器超时时,产生SIGALARM信号。如果不捕捉或不忽略此信号,则其默认动作是终止调用该alarm函数的进程。
  每个进程只能有一个闹钟时钟,如果在调用alarm时,已经为该进程设置过闹钟时钟,而且它还没有超时,则将该闹钟时钟的余留值作为本次alarm函数调用的返回值。以前登记的闹钟时钟将被新值代替。
  如果有以前为进程登记的尚未超过的闹钟时钟,而且本次调用的seconds为0,则取消以前的闹钟时钟,其余留值仍作为alarm的返回值。
  (以上这几段话摘自《unix环境高级编程》)。
  所以在while循环的printf("...\n").后面添加一句alarm(0).就可以满足我的要求,即在...后再sleep 30s然后再进入循环。

  特别推荐:

  C/C 误区一:voidmain()

  C/C 误区二:fflush(stdin)

  C/C 误区三:强制转换malloc()的返回值

  C/C 误区四:charc=getchar().

  C/C 误区五:检查new的返回值



相关文章


计算机二级C 辅导:sleep与alarm计算机二级考试
计算机二级:我使用过的一些校验函数计算机二级考试
计算机二级基础知识:C_C 常见误区计算机二级考试
计算机二级C 惯用法之RAII计算机二级考试
在C 中如何使用调试器逐步跟踪程序计算机二级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛