我有一个包含一些文件的目录,这些文件通过脚本进行了修改,因此它们的 mtimes 仅相差几毫秒。 file mtime filename
命令以秒为单位为我提供了上次修改时间,这对我没有多大帮助。如何以毫秒精度获取他们的最后修改时间?
最佳答案
看起来最简单的方法是编写一个 Tcl 扩展 在 C 中以您需要的精度获取文件修改时间。 这实际上非常简单。
写代码...
#define USE_TCL_STUBS
#include <tcl.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int precisionmtimeObjCmd (
ClientData cd,
Tcl_Interp* interp,
int objc,
Tcl_Obj * const objv[]
)
{
char *fn;
int len1;
struct stat statinfo;
long value;
/* for UTF-8 locales */
if (objc != 2) {
Tcl_WrongNumArgs(interp, 1, objv, "precisionmtime");
return TCL_ERROR;
}
fn = Tcl_GetStringFromObj(objv[1], &len1);
stat (fn, &statinfo);
value = statinfo.st_mtime;
value *= 1000;
value += statinfo.st_mtim.tv_nsec / 1000000;
Tcl_SetObjResult (interp, Tcl_NewLongObj(value));
return TCL_OK;
}
int Precisionmtime_Init (Tcl_Interp *interp)
{
Tcl_Encoding utf;
if (!Tcl_InitStubs (interp,"8.3",0)) {
return TCL_ERROR;
}
Tcl_CreateObjCommand (interp,"precisionmtime", precisionmtimeObjCmd, NULL, NULL);
Tcl_PkgProvide (interp,"precisionmtime","0.1");
return TCL_OK;
}
编译、链接....
bll-tecra:bll$ cc -I/home/bll/local/include -c pmtime.c -o pmtime.o -fPIC
bll-tecra:bll$ cc -L/home/bll/local/lib -o precisionmtime.so -shared pmtime.o -ltclstub8.6
然后测试...
bll-tecra:bll$ rlwrap tclsh
% load [pwd]/precisionmtime.so
% info commands precision*
precisionmtime
% precisionmtime /home/bll/local/include/tcl.h
1524458623343
% file mtime /home/bll/local/include/tcl.h
1524458623
%
好吧,为你做了所有的工作。但这很有趣。
关于tcl - 文件上次修改时间,精度为毫秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51260051/