Программа:
#include<stdio.h>
#include<stdlib.h>
#include<dirent.h>
#include<sys/stat.h>
int main(int argc, char *argv[])
{
DIR *dp;
struct dirent *dirp;
struct stat stbuf;
if (argc != 2)
printf("usage: ls directory_name\n");
if ((dp = opendir(argv[1])) == NULL)
printf("can’t open %s", argv[1]);
while ((dirp = readdir(dp)) != NULL){
stat(dirp->d_name,&stbuf);
if(S_ISDIR(stbuf.st_mode)){
printf("Directory: ");
}
printf("%s\n",dirp->d_name);
}
closedir(dp);
exit(0);
}
Вывод:
$ ./a.out test/
dir3
d
c
Directory: .
Directory: a
Directory: ..
Directory: dir4
Directory: dir2
Directory: dir0
Directory: b
Directory: e
Directory: dir1
$
Ниже приведен список файлов, которые содержит каталог «test».
$ ls -F test/
a b c d dir0/ dir1/ dir2/ dir3/ dir4/ e
$
Ожидаемый вывод: если файл является каталогом, вывод будет «Каталог: dir1/». Остальное только имя файла. Но вывод программы не такой, как ожидалось. Программа содержит какую-либо ошибку?. Есть ли дайте мне знать.
Заранее спасибо...
stat()
, чтобы увидеть, есть ли какие-либо ошибки. (2) Вы звонитеstat()
(например)dir2
, но вам нужно передатьtest/dir2
. - person psmears   schedule 18.08.2015stat
возвращает, я готов поспорить, что это-1
(что означает, что это не удалось) для большинства имен. - person Some programmer dude   schedule 18.08.2015a
в рабочем каталоге процесса (в котором вы запустили программу), а не в каталогеtest
. Прочитайте комментарий psmears более внимательно. - person Some programmer dude   schedule 18.08.2015