How to display st_atime and st_mtime

I want to display two attributes from stat 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 */



Here is my code I am trying to display the last time accessed and last modified folder / file

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


I want to show both the time and date of a person, for example 03/15/1952 23:11:34 from the folder / file information that was last modified or accessed in Linux


source to share

3 answers

This is a little different from your code in terms of styling, but perhaps this is useful?

#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) {

    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));
    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));

char *formatdate(char *buff, time_t val)
    strftime(buff,200, "%d.%m.%Y %H:%M:%S", localtime(&val));
    return buff;


And this is the answer that I was looking for again thanks.



Try the following: printf("%s", asctime(localtime(&buffer.st_mtime)));



All Articles