При попытке написать программу, которая будет искать в каталоге и отображать содержимое, соответствующее аргументу командной строки, я столкнулся с проблемой, я не могу показаться выяснить.while и если не ладить с readdir() в C
Я поставил оператор if в цикле while, чтобы проверить соответствие строк, но проблема в том, что я возвращаю только последнюю запись в каталоге. Если я прокомментирую оператор if, он полностью распечатает весь каталог, и он отлично подходит для строк, но он не будет делать оба.
Друг предложил, что он имеет какое-то отношение к стеку, но поскольку он печатает после каждого чтения, я не понимаю, почему это должно быть.
DIR *dirPos;
struct dirent * entry;
struct stat st;
char *pattern = argv[argc-1];
//----------------------
//a few error checks for command line and file opening
//----------------------
//Open directory
if ((dirPos = opendir(".")) == NULL){
//error message if null
}
//Print entry
while ((entry = readdir(dirPos)) != NULL){
if (!strcmp(entry->d_name, pattern)){
stat(entry->d_name, &st);
printf("%s\t%d\n", entry->d_name, st.st_size);
}
}
Если я правильно понял вашу проблему, вы хотите использовать некоторый API-интерфейс regext. strcmp не соответствует шаблону, но он точно соответствует строке. – PnotNP
Очевидно, что ваша программа печатает только одну запись, потому что она печатает запись с именем <, которая хранится в шаблоне>, а две разные записи не могут иметь одно и то же имя. – immibis
Примечание: 'stat()' нуждается в полном пути. – joop