【发布时间】:2013-11-05 23:58:04
【问题描述】:
我必须编写一个名为 BuzzOff.c 的程序。我的程序必须接受 3 个整数参数:
$ BuzzOff 10 99999 2
我的程序应该悄悄地从 0 计数到 0.001 的增量,并且
保持和计数器的结果的总和,
即total += count * <arg1>;
我已经阅读了信号,但我仍然不确定它们是如何工作的。如何让我的程序在收到 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;
}
【问题讨论】:
-
也许您(应该)收到的编译器错误会为您指明正确的方向。
-
你有比信号更大的问题,在这里,SO 并不是让别人教你信号如何工作的正确地方,但你基本上必须 (1) 注册你的信号处理程序,最好使用
sigaction(); (2) 实际上以某种方式将信号发送到您的进程。printf()和朋友在信号处理程序中使用通常是不安全的,尽管在这种特殊情况下您不会遇到任何问题。 -
而且你也可能在使用这样的全局变量时遇到问题。
sig_atomic_t会比float好,但sig_atomic_t是一个整数类型。
标签: c signals signal-handling