我正在编写自己的ls -l程序,并且必须显示文件中间日期。它工作得很好,直到我意识到应该以格式“ dd”,“ mm”显示日期,然后才显示今年的文件中的小时和分钟。 如果我要检查的是目录或在不同年份的最后一次修改 我必须以“ dd”,“ mm”,“ yyyy”的格式输出日期。 我不知道如何只比较st_mdate的年份来更改输出。 试图使if语句检查我正在描述的东西是否是目录,它起作用了。但是现在我也需要对普通文件执行类似的操作。 我的问题是如何比较st_mdate年。
这是我的职能:
void mdate(struct stat mystat){
if(S_ISDIR(mystat.st_mode)){
char mtime[80];
time_t t = mystat.st_mtime;
struct tm lt;
localtime_r(&t, <);
strftime(mtime, sizeof mtime, "%d %b %Y ", <);
printf(" %-12s", strtok(mtime,"n"));
}
else{
char mtime[80];
time_t t = mystat.st_mtime;
struct tm lt;
localtime_r(&t, <);
strftime(mtime, sizeof mtime, "%d %b %H:%M ", <);
printf(" %-12s", strtok(mtime,"n"));
}
}
编辑: 这是我的 output
编辑2
知道了,这是我的最终代码:
void mdate(struct stat mystat){
time_t current;
time_t t = mystat.st_mtime;
struct tm * timeinfo;
char mtime[80];
struct tm lt;
time ( ¤t );
timeinfo = localtime ( ¤t );
localtime_r(&t, <);
if(S_ISDIR(mystat.st_mode)|| (timeinfo->tm_year>lt.tm_year)) {
strftime(mtime, sizeof mtime, "%d %b %Y ", <);
printf(" %-13s", strtok(mtime,"\n"));
}
else {
strftime(mtime, sizeof mtime, "%d %b %H:%M ", <);
printf(" %-13s", strtok(mtime,"\n"));
}
}