LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 880|回复: 2

请教signal函数问题

[复制链接]
发表于 2009-12-22 13:51:02 | 显示全部楼层 |阅读模式

  1. #include <stdio.h>
  2. #include <signal.h>
  3. #include <unistd.h>

  4. void sig_arm(int signo);
  5. sighandler_t my_signal(int signo, sighandler_t func); //编译报错

  6. void sig_arm(int signo)
  7. {
  8.          alarm(10);
  9.          printf("signal:%d \n", signo);
  10. }


  11. //自定义的signal
  12. sighandler_t my_signal(int signo, sighandler_t func)//编译报错
  13. {
  14.         struct sigaction act, oct;
  15.         act.sa_hander = func;
  16.         act.sa_flags = 0;
  17.         sigemptyset(&act.sa_mask);
  18.         act.sa_flags |= SA_INTERRUPT;
  19.         if(sigaction(signo, &act, &oct) < 0)
  20.         {
  21.                 printf("register signal error");
  22.                 return SIG_ERR;
  23.         }
  24.         return oct.sa_hander;
  25. }

  26. int main()
  27. {
  28.         char s[100];
  29.         int n;
  30.         if(my_signal(SIGALRM, sig_arm) == SIG_ERR)//编译报错
  31.         {
  32.                 printf("register signal error");
  33.         }
  34.         alarm(10);
  35.         if((n=read(STDIN_FILENO, s, 100)) < 0)
  36.         {
  37.                 printf("read error \n");
  38.         }
  39.         alarm(0);
  40.         printf("you input is %s \n", s);
  41. }

  42. -----------------------------------------------------
  43. 在fedora 9下编译错误如下:
  44. test3.c:6: 错误:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘my_signal’
  45. test3.c: 在函数‘main’中:
  46. test3.c:18: 警告:比较指针和整数
  47. test3.c: 在文件层:
  48. test3.c:31: 错误:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘my_signal’
  49. -----------------------------------------------------
  50. 望各位指点。。。。在此谢过。。(环境:fedora 9, gcc 4.3)
复制代码
发表于 2009-12-22 14:06:07 | 显示全部楼层
在引用头文件之前定义这个宏, 这样才会启用 gnu 扩展. 至于剩下的就是拼写错误了.
  1. #define _GNU_SOURCE
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-22 17:14:50 | 显示全部楼层
两处错误:
1. 未定义#define _GNU_SOURCE
2. sa_handler拼写错了。
-------------------------------------------
感谢"remote fish"
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表