有没有办法检查程序最后一次运行的时间? (Unix 中的 C)
Posted
技术标签:
【中文标题】有没有办法检查程序最后一次运行的时间? (Unix 中的 C)【英文标题】:Is there a way to check the last time a program was run? (C in Unix) 【发布时间】:2014-12-27 12:10:54 【问题描述】:我正在用 C 语言编写一个程序/实用程序来查找(然后移至新目录)当前目录中上次运行该实用程序后已修改的文件。
我想知道的是是否有办法找到该实用程序上次运行的时间。或者,在程序中存储时间的一种方式(以便将上次存储的时间与当前时间进行比较,然后将“上次”变量更新为当前时间)。
当我键入此内容时,我突然想到我可以将时间写入文件(在实用程序运行时覆盖单个条目)并从程序中的文件中检索值,尽管我不知道这是否将是最好的方法。
【问题讨论】:
据我所知,没有操作系统存储程序的最后运行时间。但是,您可以轻松地将时间存储在文件中。 在特定位置创建具有特定名称的文件(以免打扰用户的其他文件)。通常:/place/where/myprogramis/something/timestamp.file
如果您需要一个全局(系统范围)时间戳,或者 /the/directory/where/I/want/to/monitor/changes/.myprogram_timestamp.file
如果您需要一个可以运行程序的每个目录(+ 在您的程序中添加对目录上方所有内容的查找,所以您可以找出,如果在带有时间戳的目录下的某些级别上运行,如果您以前有时运行过?并且在下面的级别上您也可以更新时间戳?)
最好把持久化信息放在/var/run/
下
@BasileStarynkevitch:可能更好是的。我这样做的方式是:/var/run 下的单个文件(或者可能是更持久的位置),其中包含每个文件的(排序)列表程序运行的目录和时间,(可能还有用户,或者您可能需要的其他信息数据,在同一行)。然后每次任何人运行程序时,它都需要检查和更新该文件(因此它必须可由“每个人”写入......如果您不关心该文件正在被修改,好吧,如果您需要更好的关于如何写入文件变得有点棘手(+加密?))
【参考方案1】:
您可以使用文件系统的最后访问时间(在 GNU/linux 中,您可以使用 ls -lu
查看最后访问时间)。
这不是一个可移植的解决方案,因为它取决于文件系统和文件系统设置(请参阅下面的 JoachimPileborg 编辑)
此外,查看this question 以获取 C 中的最后访问时间(使用 atime 而不是 mtime)。
【讨论】:
上次访问时间与上次执行程序的时间不同。有些人甚至关闭了上次访问时间的设置,以加快文件系统的运行速度。 @JoachimPileborg- 是的,你是对的,这不是一个可移植的解决方案,但如果你在运行时知道系统,则可能是一个解决方案(我进行了编辑以更好地解释)【参考方案2】:您可以使一个类包含信息并将其序列化为文本文件,它更易于访问并且可以存储多个值, 然后存储新值首先删除文件,然后再次创建文件。
另一种方法可能是包含信息的注册密钥。
希望对你有用;)
【讨论】:
标题说 C 而不是 C++,所以你不能有课程 注册键是 Windows 特定的。 Unix、Posix、Linux 正在使用文件。以上是关于有没有办法检查程序最后一次运行的时间? (Unix 中的 C)的主要内容,如果未能解决你的问题,请参考以下文章