【发布时间】:2015-10-09 14:19:57
【问题描述】:
我有这个代码:
#include <stdio.h>
#include <signal.h>
void signal_handler(int signal) {
printf("Caught signal in CHILD.\n");
}
int main(void) {
int s;
signal(SIGTSTP, signal_handler);
while(1){
printf("%s@%s/# ",getlogin(),get_current_dir_name());
scanf("%d",&s);
}
return 0;
}
当我运行它打印的代码时:
something: ^ZCaught signal in CHILD.
据我所知,当我按下 ctr-z 时,scanf 不会执行。虽然在我的函数中的 printf 之后它直接进入 scanf,等待输入然后再次启动循环。当我按 ctr-z 并再次启动 while 循环时,有什么办法可以避免 scanf?我试过类似的东西
void signal_handler(int signal) {
printf("Caught signal in CHILD.\n");
printf("%s@%s/# ",getlogin(),get_current_dir_name());
}
但它没有用。在第二个 printf 直接进入 scanf 之后,等待输入,然后再次开始循环。我可以以某种方式重新开始循环吗?
【问题讨论】:
-
我没有得到你。代码完全按照您编写的方式执行。当您第一次按 ctrl-z scanf 时,会跳过并重新启动循环。
-
这是我的问题! Scanf 没有跳过!我不明白为什么......
-
最糟糕的代码可能是将 exit(1) 添加到您的信号处理程序中。我会发布一个例子