如何在C语言中正确使用信号?
我必须写一个叫做BuzzOff.c的程序。我的程序必须接受3个整数参数,如下所示: $10999992 我的程序应该安静地从0到0.001递增,并且 保存和计数器的结果总和, i、 e.如何在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
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循环之前还是之后调用它?