C 条件信号捕获

C 条件信号捕获,c,keyboard,signals,cat,ctrl,C,Keyboard,Signals,Cat,Ctrl,我知道我的头衔可能会让人困惑,但请耐心听我说。我不熟悉信号 我有一个类似于cat或moreunix命令的程序,但它有一点扭曲。它打印出第一个x行,然后允许用户按Ctrl-/打印出下一个x行。我知道默认情况下,Ctrl-/用于停止进程,但我想覆盖它 我想做一些类似的事情 if(用户输入=信号(SIGQUIT,sig功能)) 然后打印下一行 我不知道如何有条件地检查用户是否输入了Ctrl-/信号 现在,我的代码强制用户输入n以转到下一个x行,如下所示 scanf(" %c", &am

我知道我的头衔可能会让人困惑,但请耐心听我说。我不熟悉信号

我有一个类似于
cat
more
unix命令的程序,但它有一点扭曲。它打印出第一个x行,然后允许用户按Ctrl-/打印出下一个x行。我知道默认情况下,
Ctrl-/
用于停止进程,但我想覆盖它

我想做一些类似的事情

if(用户输入=信号(SIGQUIT,sig功能))
然后打印下一行

我不知道如何有条件地检查用户是否输入了
Ctrl-/
信号

现在,我的代码强制用户输入n以转到下一个x行,如下所示

        scanf(" %c", &next);
        if (next == 'n'){
          //loop +4 times and only print the last 4 lines
          for (i = 0; i < 4; i++){
            printf("%s", buf);
            if (i < 3){
              if (fgets(buf, sizeof(buf), file) == NULL){
                fclose(file);
                return 0;
              }
            }
          }
scanf(“%c”和“下一步”);
如果(下一个=='n'){
//循环+4次,只打印最后4行
对于(i=0;i<4;i++){
printf(“%s”,buf);
如果(i<3){
if(fgets(buf,sizeof(buf),file)==NULL){
fclose(文件);
返回0;
}
}
}

有没有办法做到这一点?

信号捕获必须通过调用
signal()
(或者更好的
sigaction()
)来明确处理。对,但是我如何有条件地检查信号是否已输入?我是否应该将条件块放在
signal(sig,function)调用的函数中
?不管怎样,我可以在这里看到正确的方法是的,您有一个由信号调用的函数。这取决于您处理该信息(因为它破坏了执行流,您可能需要处理全局标志)。信号捕获必须通过调用
信号()
(或者更好的
sigaction()
)来明确处理.是的,但我如何有条件地检查信号是否已输入?我是否应该将条件块放在由
信号调用的函数(sig,function)
中?无需担心,我可以在这里看到正确的方法是的,您有一个由信号调用的函数。然后由您来处理该信息(由于它破坏了执行流,您可能需要处理全局标志)。