无法使用系统调用

时间:2014-12-22 03:51:04

标签: c linux unix system

我必须弄清楚如何编写循环但不能使用CTRL-C退出5秒的编程,但是在5秒后我可以使用CTRL-C结束程序。我一直在阅读系统调用,什么不是,但我无法弄清楚从哪里开始。如果有人能指出我正确的方向,这里有确切的说明。谢谢。

编写一个C程序,它使用系统调用创建一个循环,并且不能用控件C杀死五秒钟。当它开始时它打印“我已经开始循环,不能用^ C杀死。 。 “然后每隔一秒打印一条消息”静止循环。 。 “五秒钟之后允许用控件C杀死循环并显示消息”我仍在循环但我可以用^ C杀死...“这会每秒显示一次,直到用户杀死它。

2 个答案:

答案 0 :(得分:1)

您想查看signal(2)界面。当在UNIX / Linux环境中发生某些与进程相关的事件时,操作系统将向进程发送信号(实质上是软件中断)。您可以使用signal函数“捕获”一个信号来设置一个回调函数,该函数会在给定信号发生时得到通知。对于Ctrl-C,您希望查看SIGINT,但是您可以使用相同的界面处理其他信号。至于暂停,这很容易 - 只需在循环中使用sleep()

答案 1 :(得分:1)

你可以使用这个。

void handler(int signo)
{
  signal(SIGINT,SIG_DFL);
}

main()
{
   signal(SIGINT,SIG_IGN);
   signal(SIGALRM,handler);
   // your code.
   alarm(5);// for 5 seconds.
   while(1)
   { sleep(1);
     printf("your message\n");
   }    
}

首先使用singal忽略SIGINT。和sigalrm的处理程序。所以前5秒ctrl+c将不起作用。在ctrl + c运行后找到sigalrm时。因此,根据您在特定时间段内的问题ctrl+c将被停止。