gpt4 book ai didi

C 编程中的计数器

转载 作者:太空宇宙 更新时间:2023-11-04 02:36:55 26 4
gpt4 key购买 nike

我正在尝试为我的程序设置一个计数器来计算发送信号的次数。我试图实现程序在按两次 ctrl +c 后退出。我有大部分代码,但不知道如何将计数器链接到 if 部分。这是我的代码。

#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
// user-defined signal handler for alarm.

int cnt=0;

void my_handler(int signo)
{
while ( cnt < 2){
if (signo == SIGINT)
{
printf("Press ctrl c to stop\n");

exit(0);

}
}
}

int main(void)
{
signal(SIGINT,my_handler);
while(1){
printf(" I am running into infinite loop.., stop me if you dear..\n");
sleep(1); /* wait until alarm goes off */
}
} /* main */

我尝试了上面的代码,似乎计数器将永远保持在 0,并且程序会在按下 ctrl+c 时立即退出。

最佳答案

You can't do much safely in a signal handler ,绝对没有 I/O。为了获得最大的可移植性,signal 处理程序实际上只有少数几件事可以影响全局状态:

  1. 分配给 volatile sig_atomic_t 变量
  2. 调用signal
  3. abort, exit 等出错

您无法安全地执行 I/O。安全的做法是设置一个标志,主线程可以检查并为您打印。如果不需要打印,对您的处理程序的第一次调用可以自行取消注册,使用 SIG_DFL 恢复默认行为(或者如果您需要做一些特殊的事情,则注册一个新的“第二个 Ctrl-C”处理程序) 所以第二个 Ctrl-C 会正常结束。

关于C 编程中的计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36142470/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com