Во-первых, спасибо за ваше время, моя проблема в том, что я пытаюсь реализовать команду ls с максимальным количеством флагов, таких как (ls -laRt ...).Я понимаю структуру stat и все функции time / ctime / strftime, но когда я хочу напечатать их в моем выводе, они дают мне большое число, поэтому я нашел, как преобразовать метку времени st_mtime с ctime, но я хочу получить результат в "Месяц День Час: Минуты, как (ls -lRt) формат без использования strftime, возможно, или я должен реализовать эту функцию тоже?И второй вопрос, для моего количества жестких ссылок, как я могу преобразовать результат печати на моем выходе что-то вроде "-77452048" в "реальный" результат?
Это мой главный, я начинающийтак что я открыт для всех критиков, спасибо U!
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <err.h>
#include <sys/stat.h>
#include <string.h>
#include <time.h>
#include <pwd.h>
#include <grp.h>
#include <stdint.h>
int main (int argc, char **argv)
{
DIR *dir;
struct dirent *d;
struct stat s;
char chemin[256];
struct passwd *p;
p = getpwuid(geteuid());
struct group *grp;
grp = getgrgid(getgrnam("."));
if (argc != 2)
{
perror("Filename\n");
exit(-1);
}
if ((dir=opendir(argv[1])) == NULL)
{
perror("opendir error");
exit(-1);
}
while ((d = readdir(dir)) != 0)
{
if(!strcmp (d->d_name, "."))
{
continue;
}
if(!strcmp (d->d_name, ".."))
{
continue;
}
strcpy (chemin, argv[1]);
strcat (chemin, "/");
strcat (chemin, d->d_name);
if (!stat(chemin, &s))
{
printf((S_ISDIR(s.st_mode)) ? "d" : "-");
printf((s.st_mode & S_IRUSR) ? "r" : "-");
printf((s.st_mode & S_IWUSR) ? "w" : "-");
printf((s.st_mode & S_IXUSR) ? "x" : "-");
printf((s.st_mode & S_IRGRP) ? "r" : "-");
printf((s.st_mode & S_IWGRP) ? "w" : "-");
printf((s.st_mode & S_IXGRP) ? "x" : "-");
printf((s.st_mode & S_IROTH) ? "r" : "-");
printf((s.st_mode & S_IWOTH) ? "w" : "-");
printf((s.st_mode & S_IXOTH) ? "x" : "-");
} else
{
perror("Erreur dans stat");
}
printf(" ");
printf("%d", &s.st_nlink);
printf(" ");
printf("%s", p->pw_name);
printf(" ");
printf("%s", grp->gr_name);
printf(" ");
printf("%d", &s.st_mtime);
printf(" ");
printf("%9jd", (intmax_t)s.st_size);
printf(" ");
printf("%s ", d->d_name);
printf("\n");
}
closedir(dir);
}