Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C语言中正确使用信号?_C_Signals_Signal Handling - Fatal编程技术网

如何在C语言中正确使用信号?

如何在C语言中正确使用信号?,c,signals,signal-handling,C,Signals,Signal Handling,我必须写一个叫做BuzzOff.c的程序。我的程序必须接受3个整数参数,如下所示: $10999992 我的程序应该安静地从0到0.001递增,并且 保存和计数器的结果总和, i、 e.total+=count*; 我已经读到了信号,但我仍然不确定它们是如何工作的。当我的程序收到SIGUSR1时,我如何使它打印当前的运行总数 这就是我到目前为止所做的: #include<stdio.h> #include<signal.h> float total; void sig

我必须写一个叫做BuzzOff.c的程序。我的程序必须接受3个整数参数,如下所示:

$10999992

我的程序应该安静地从0到0.001递增,并且 保存和计数器的结果总和, i、 e.
total+=count*;

我已经读到了信号,但我仍然不确定它们是如何工作的。当我的程序收到SIGUSR1时,我如何使它打印当前的运行总数

这就是我到目前为止所做的:

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

float total;

void sig_handler(int signo)
{
    if (signo == SIGUSR1)
      printf("total: %f\n", total);
}

int main(int argc, char *argv[])
{
    if( argc!=4 ) {
        printf("need three arguments\n"); return(1);
    }
    float count;

    for (count = 0; count < argv[3]; count += 0.001)
      total += count*argv[2];

    return 0;

}
#包括
#包括
浮动总额;
无效信号处理器(int signo)
{
if(signo==SIGUSR1)
printf(“总计:%f\n”,总计);
}
int main(int argc,char*argv[])
{
如果(argc!=4){
printf(“需要三个参数”);返回(1);
}
浮点数;
对于(计数=0;计数
您需要指定SIGUSR1的处理程序

类似于

信号(SIGUSR1,sig_处理器)


在main()中调用它。

也许您(应该)收到的编译器错误将为您指明正确的方向。在这里,您遇到了比信号更大的问题,因此,请别人教您信号是如何工作的并不是一个正确的地方,但您必须(1)注册您的信号处理程序,最好使用
sigaction()
;(2)以某种方式向进程发送信号
printf()
和friends通常不适合在信号处理程序中使用,尽管在这种特殊情况下不会出现任何问题。而且,使用这样的全局变量也会遇到问题
sig_atomic_t
float
更好,但是
sig_atomic_t
是一个整数类型。如果我想打印当前运行的总数,我会在for循环之前还是之后调用它?