检查修改日期不起作用

时间:2019-04-03 08:21:21

标签: c linux daemon

我在检查修改日期时遇到问题。 fprintf在控制台中为文件夹中的每个相同编号等于零的文件打印。

while (1) {
    source = opendir(argv[1]);
    while ((file = readdir(source)) != NULL) {
        if (file->d_type != DT_REG)
            continue; 
        stat(file->d_name, &file_details);
        fprintf(stderr, "Name: %s, Last modify: %ld  \n", file->d_name, file_details.st_mtime);
    }
    closedir(source);
    sleep(5);
}

1 个答案:

答案 0 :(得分:0)

您必须构造目录条目的路径并将其传递到stat。当前,您传递了条目名称,该名称仅在从当前目录枚举时才有效。

此外,您应该测试stat的返回值以检测任何问题。这表明stat无法使用当前代码。

这是修改后的版本:

#include <errno.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>

...

char path[1024];
while (1) {
    source = opendir(argv[1]);
    if (source == NULL)
        break;
    while ((file = readdir(source)) != NULL) {
        if (file->d_type != DT_REG)
            continue; 
        snprintf(path, sizeof path, "%s/%s", path, file->d_name);
        if (!stat(path, &file_details))
            fprintf(stderr, "Name: %s, Last modify: %ld\n", path, file_details.st_mtime);
        else
            fprintf(stderr, "Cannot stat %s; %s\n", path, strerror(errno));
    }
    closedir(source);
    sleep(5);
}