我有一个程序,应该从命令行中获取3个不同的参数。第三个参数是传播到警报功能的唯一参数。例如,如果我的程序称为Buzzoff,这就是它的工作方式:

$ BuzzOff 10 99999 1

第三个参数是1,因此1将传递到警报功能中。我的程序应每3秒打印出变量总数的值。在这种情况下,每1秒钟。但是,当我尝试将1用作我的第三个参数时,警报需要超过1秒钟。大约需要14秒。无论我用与Arg3使用什么,它似乎都以相同的速度打印。我是否正确地实现了警报功能?

这是我的代码:

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

double arg1, arg2, arg3;
double total = 0;
int debug = 0;

void sigusr1_handler(int signo)
{
    if (signo == SIGUSR1)
      printf("total: %f\n", total);
}
void sigusr2_handler(int signo)
{
    if (signo == SIGUSR2)
      debug = ((debug == 1) ? 0 : 1);
}
void sigint_handler(int signo)
{
  if (signo == SIGINT)
    {
      printf("total: %f\n", total);
      exit(0);
    }
}
void sigalrm_handler(int signo)
{
  if (signo == SIGALRM)
    {
      printf("total: %f\n", total);
      signal(SIGALRM, sigalrm_handler);
      alarm(arg3);
    }
}

int main(int argc, char *argv[])
{
    if( argc!=4 ) {
        printf("need three arguments\n"); return(1);
    }
    arg1 = (double) atoi(argv[1]);
    arg2 = (double) atoi(argv[2]);
    arg3 = (double) atoi(argv[3]);

    double count;

    signal(SIGUSR1, sigusr1_handler);
    signal(SIGUSR2, sigusr2_handler);
    raise(SIGUSR2);
    if (debug == 1)
      {
    signal(SIGUSR1, SIG_IGN);
    signal(SIGALRM, sigalrm_handler);
    alarm(arg3);
      }
    else if (debug == 0)
      {
    signal(SIGUSR1, sigusr1_handler);
    signal(SIGINT, sigint_handler);
      }
    for (count = 0; count < arg2; count += 0.001)
      {
    total += count*arg1;
      }
    return 0;

}
有帮助吗?

解决方案

您将输入转换为 double, ,但是警报()函数期望 unsigned int. 。不知道1.0的下部(上半部)的位模式是什么,但是如果它出现为14,我不会感到惊讶。

编译器是否不抱怨通过 double arg3 进入 alarm()?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top