Я хотел бы написать простой сценарий C в UNIX, который будет работать как "ls -l".У меня есть рабочая часть, где скрипт перечисляет все файлы в текущем каталоге:
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <dirent.h>
#include <sys/types.h>
int main(int argc, char *argv[])
{
DIR *katalog;
struct dirent *dir;
katalog = opendir(".");
if (argc == 1) {
printf("without option");
if (katalog) {
while ((dir = readdir(katalog)) {
printf("%s \n", dir->d_name);
}
closedir(katalog);
}
return(0);
}
}
Теперь я хотел добавить информацию о st_gid, st_uid, st_size и st_mtime.Я смотрел с st_uid.Мой код теперь выглядит так (он хорошо компилируется под Unix).К сожалению, выдает ошибку «Ошибка сегментации (ядро сброшено)».Я пытался найти ответ в стеке и в Интернете и даже использовал некоторые подсказки из других потоков (например: проблема формата C с printf ("% d", astatbuff-> st_size); ), но все же ошибка возникает ... Я не знаю, что еще я могу изменить, чтобы исправить это ...
Вот код, который выдает ошибку:
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>
int main(int argc, char *argv[])
{
DIR *katalog;
struct dirent *dir;
katalog = opendir(".");
struct stat *astat;
if (argc == 1) {
printf("Without option");
if (katalog) {
while ((dir = readdir(katalog)) != NULL && astat->st_uid != 0) {
printf("%s %llu \n", dir->d_name, (unsigned long long)astat->st_uid);
}
closedir(katalog);
}
return(0);
}
}