计算unix进程时间溢出前的天数

时间:2017-01-30 18:22:41

标签: c unix

我正在研究Unix环境中的高级编程示例,并提出了以下问题:

如果处理时间存储为32位有符号整数,并且系统每秒计算100个滴答,那么该值会溢出多少天?

void proc_ovf()
{
        int sec = 60;
        int min = 60;
        int hour = 24;
        int tick = 100;
        int epoch_time = (((INT_MAX / (sec * tick)) / min) / hour);
        struct tm * timeinfo;
        time_t epoch_time_as_proc_t = epoch_time;
        timeinfo = localtime(&epoch_time_as_proc_t);
        printf("3] overflow date of proc: %s", asctime(timeinfo));
}

以下解决方案是否合理计算溢出前的天数?

(((INT_MAX /(sec * tick))/ min)/小时)

这个计算产生了248天。

1 个答案:

答案 0 :(得分:3)

248天看起来不错。

但是你的代码并没有。您的变量名称错误。他们应该是:

int ticks_per_second = 100;
int seconds_per_minute = 60;
int minutes_per_hour = 60;
int hours_per_day = 24;

int ticks = INT_MAX;
int seconds = ticks / ticks_per_second;
int minutes = seconds / seconds_per_minute;
int hours = minutes / minutes_per_hour;
int days = hours / hours_per_day;

printf("overflow after %d days\n", days);

以上代码负责提及测量单位。您能否看到测量单元在代码的第二部分的每一行中取消的程度如何?