gpt4 book ai didi

c - 如何用C语言编程control+C信号来暂停和取消暂停输出?

转载 作者:行者123 更新时间:2023-11-30 16:58:28 25 4
gpt4 key购买 nike

我是 C 编程新手,对控制信号的了解也较少。下面是我的程序,我在其中尝试暂停取消暂停在 while 循环内运行的输出。到目前为止,我可以通过按CTRL+C暂停输出,但我需要通过按CTRL再次取消暂停输出+C 我不知道该怎么做。我的问题是如何通过按 CTRL+C 键再次取消暂停我的输出。另外,我使用 Spinlock 暂停输出,直到不再按下 CTRL+C 为止,这将恢复程序以完成显示输出。该程序利用 sleep 功能每秒向终端输出一次。任何建议将不胜感激。

#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
#include <termios.h>

void f(int); //handler

int main( int ac, char* av[] )
{

if(ac == 1)
{
printf("No argument provided");
exit(1);
}
int i = atoi(av[1]);
printf("This is argument av: %i ", i);
printf("\n");

signal( SIGINT, f); // install the handler

int k = 0;
while(k != i)
{
printf("help \n");
sleep(1);
k++;
}

return 0;

}

void f(int signum)
{
while(signum)
{
int lock =0;
if(lock == 1)
continue;
}
}

最佳答案

有些unices在调用后将信号处理重置为默认值,您必须重置它。

#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>

static int lock;

void f(int);

int main(int ac, char *av[])
{

if (ac == 1) {
printf("No argument provided");
exit(1);
}

int i = atoi(av[1]);
printf("This is argument av: %i \n", i);
signal(SIGINT, f);
int k = 0;
while (k != i) {
printf("help %d \n", k);
while (lock == 1) {
puts("Sleeping, waiting for signal");
sleep(1);
}
sleep(1);
k++;
}
return 0;
}

void f(int signum)
{
signal(SIGINT, f);
printf("Signal raised %d\n", signum);
if (lock == 1) {
lock = 0;
} else {
lock = 1;
}
}

关于c - 如何用C语言编程control+C信号来暂停和取消暂停输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38807707/

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