如何在不更改其值的情况下获取先前设置的警报的剩余时间?

How to get the time left of a previously set alarm without changing its value?

是否可以知道之前使用 alarm() 系统调用设置的警报还剩多少时间,但不更改其当前值? 如果可能的话,我怎样才能得到这个?

很遗憾,没有。

timer_gettime permit this kind of interrogation of pending alarms, but the venerable alarm() 调用这样的现代替代方法没有。

您可以按照 post 中的建议清除并重新设置 alarm(),或者,如果您自己设置 alarm(),您当然可以计算并记住预期到期时间。 (注意:alarm() 调用只有一秒的精度。)

您可以通过调用 alarm(0) 并查看 return 值来获取剩余秒数。但是,这不符合您不更改当前值的要求,因为调用 alarm(0) 会取消任何未决警报。您可以再次调用警报,传递您刚刚读取的剩余秒数,这将重置警报。问题是它不是很精确,并且不会完全模仿原始警报呼叫的行为,因为时间分辨率只有一秒。如果您这样做,您的时间可能会偏差将近整整一秒,但也许没关系。

从你的问题来看,你可能已经考虑过所有这些问题,并且像我一样阅读了手册页。我仍然没有找到您问题的确切答案,但我想提出我的不准确答案,以防对您来说足够好。