Способ отображения времени время изменения СТ и СТ


Я хочу отобразить два моих атрибута из структуры stat

struct stat {
dev_t     st_dev;     /* ID of device containing file */
ino_t     st_ino;     /* inode number */
mode_t    st_mode;    /* protection */
nlink_t   st_nlink;   /* number of hard links */
uid_t     st_uid;     /* user ID of owner */
gid_t     st_gid;     /* group ID of owner */
dev_t     st_rdev;    /* device ID (if special file) */
off_t     st_size;    /* total size, in bytes */
blksize_t st_blksize; /* blocksize for file system I/O */
blkcnt_t  st_blocks;  /* number of 512B blocks allocated */
time_t    st_atime;   /* time of last access */
time_t    st_mtime;   /* time of last modification */
time_t    st_ctime;   /* time of last status change */

};

Вот мой код, который я пытаюсь отобразить в последний раз доступа и в последний раз последней модификации папки / файла

struct tm *time;
char buffer[200];
time = localtime(file_info.st_atime);
strftime(buffer, sizeof(buffer), "%d.%m.%Y %H:%M:%S", time);
printf("%sn", buffer);
time = localtime(file_info.st_mtime);
strftime(buffer, sizeof(buffer), "%d.%m.%Y %H:%M:%S", time);
printf("%sn", buffer);

Я хочу отображать, как человек считывает время и дату, например, 15.03.1952 23: 11: 34 информации о папке / файле, которая была в последний раз изменена или доступна в linux

3 4

3 ответа:

Это немного отличается от вашего кода с точки зрения стиля, но, возможно, это полезно?

#include <time.h>
#include <stdio.h>
#include <sys/stat.h>
#include <stdlib.h>

char* formatdate(char* str, time_t val)
{
        strftime(str, 36, "%d.%m.%Y %H:%M:%S", localtime(&val));
        return str;
}

int main()
{
    int errno;
    const char* filename;
    filename = "stat.c";

    errno = 0;
    struct stat *file_info = malloc(sizeof(struct stat));
    if (lstat(filename, file_info) != 0) {
            perror("Error");
            exit(1);
    }

    char date[36];
    printf("Access: %s\n", formatdate(date, file_info->st_atime));
    printf("Modify: %s\n", formatdate(date, file_info->st_mtime));
    printf("Change: %s\n", formatdate(date, file_info->st_ctime));
    free(file_info);
    return 0;
}
        char buffer[200];

    printf("Access : %s\n", formatdate(buffer, file_info.st_atime));
    printf("Modify : %s\n", formatdate(buffer, file_info.st_mtime));
    printf("\n\n");




char *formatdate(char *buff, time_t val)
{
    strftime(buff,200, "%d.%m.%Y %H:%M:%S", localtime(&val));
    return buff;
}
И это тот ответ, который я искал еще раз спасибо.

Попробуйте это: printf("%s", asctime(localtime(&buffer.st_mtime)));