Я пытаюсь реализовать программу ls, используя библиотеку dirent. Похоже, что мой DIR * mydir имеет значение <unspecified type>
, когда я отлаживаю команду gdb, которая говорит мне, что я не правильно включаю заголовок dirent.h, но считаю, что я правильно включаю все необходимые файлы заголовков.Реализация ls-программы в C с использованием dirent.h
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>
//Specifies whether or not to print hidden files
#define PRINT_HIDDEN 0
void readDirectory(char *dirString[]);
int main(int argc,char* argv[])
{
if(argc!=2)
{
printf("Usage: ./ls <directory>\n");
}
readDirectory(argv);
return 0;
}
void readDirectory(char *dirString[])
{
DIR *mydir;
struct dirent *entry;
//Opening the directory and checking if valid
mydir = opendir(dirString[1]);
if(mydir==NULL){
fprintf(stderr,"ls: cannot access %s: No such file or directory\n",
dirString);
exit(EXIT_FAILURE);
}
//Printing directories/files in specified directory
while((entry==readdir(mydir))!=NULL);
{
if(PRINT_HIDDEN)
{
printf("%s ",entry->d_name);
}
else
{
if(entry->d_name[0]!='.')
{
printf("%s ",entry->d_name);
}
}
}
printf("\n");
//Closing the directory
closedir(mydir);
}
Какое сообщение у вас есть? На мой взгляд, gdb не заботится о том, как/что вы правильно или нет ... –
@MatsPetersson Если я запустил программу, он ничего не печатает, когда я использую gdb и эту команду (gdb) print mydir, я получаю $ 1 = (DIR *) 0x601010, и если я использую print * mydir, я получаю $ 2 = <неполный тип> – user3501476
Когда mydir имеет значение NULL, это не обязательно означает, что файл или каталог не существует. Вместо этого вы должны назвать perror. –