我不明白为什么当我运行此代码然后使用控制+ C中断时程序立即关闭但日志文件显示"程序成功运行"。如何让它打印出正确的信息?
SELECT artist_name FROM artist
JOIN album ON artist.artist_id = album.artist_id
WHERE EXISTS (SELECT album_id FROM album)
答案 0 :(得分:1)
您可能希望sleep语句在while循环之外。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
static volatile int globalFlag = 0;
void handler() {
globalFlag = 1;
}
int main() {
FILE* log;
log = fopen("log.txt", "a");
signal(SIGINT, handler);
sleep(20);
if (globalFlag == 0){
fprintf(log, "program ran successfully\n");
fclose(log);
return 0;
} else {
fprintf(log, "program shut by signal\n");
fclose(log);
return -1;
}
}
答案 1 :(得分:1)
我很困惑&#39;我似乎误解了控制+ C的作用。&#39;所以让我在这里待一会儿。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
static volatile int globalFlag = 0;
类型应为sig_atomic_t。变量已经为0.坏名称。
void handler();
处理程序应该接受int。坏名字。可以做成静态的。
int main()
应该是&#39; void&#39;。
{
FILE* log;
log = fopen("log.txt", "a");
缺少错误检查。
signal(SIGINT, handler);
所以这里安装了处理程序......
while(globalFlag == 0){
......立即检查标志......
sleep(20);
fprintf(log, "program ran successfully\n");
fclose(log);
...程序退出是因为你没有设法足够快地发送信号。
return 0;
}
fprintf(log, "program shut by signal\n");
fclose(log);
return -1;
}
通过运行一个简单的思想实验,可以轻松调试该问题。