Просто предположение;поскольку вы не проверяете ошибку после вызова lstat, буфер eStat может содержать результат последнего успешного вызова.Попробуйте проверить, возвращает ли lstat -1.
readdir () в Linux, в корне отличается, поэтому я не могу полностью протестировать в своей системе.См. Примеры программ по тексту ссылки и тексту ссылки .Модифицируя пример кода lstat, мне кажется, это работает:
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
int main( int argc, char **argv )
{
int ecode = 0;
int n;
struct stat sbuf;
for( n = 1; n < argc; ++n ) {
if( lstat( argv[n], &sbuf ) == -1 ) {
perror( argv[n] );
ecode++;
} else if( S_ISDIR( sbuf.st_mode ) ) {
printf( "%s is a dir\n", argv[n] );
} else {
printf( "%s is not a dir\n", argv[n] );
}
}
}
Я не знаю, поможет ли это.Обратите внимание, что пример кода readdir () использует opendir () как предложено schot.Но я не могу объяснить, почему ваш readdir (), кажется, работает независимо.