최종 업데이트 - 답변이 수락 대답의 견해입니다.dirent.h의 C 사용
우선이 질문에 대한 다른 답변이 많이 있음을 알고 있습니다. 나는 이들 중 대부분을 통과 해 왔으며이 코드는 다른 많은 해답들을 조합 한 것입니다. 내가하고 싶은 일은 디렉토리의 모든 파일에 대한 전체 경로를 얻는 것입니다.
#include <limits.h>
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
DIR *d;
struct dirent * dir;
char fullpath[PATH_MAX + 1];
d = opendir("/home/adirectory");
if(d != NULL)
{
while((dir = readdir(d)) != NULL)
{
realpath(dir->d_name, fullpath);
printf("[%s]\n", fullpath);
printf("%s\n", dir->d_name);
}
// addition of the following line yields
// Value too large for defined data type
perror("Something isn't working: ");
closedir(d);
}
return 0;
}
업데이트 # 3 :
나는 즉시 while 루프 후 perror는 이유 인 dir = readdir(d)
입니다 실패 호출. 이것은 CentOS는에 잘 작동
및 우분투 GCC 4.8.5 + :
업데이트 # 2. Solaris gcc 4.5.2에서 작동하지 않습니다.
업데이트 : 오류 메시지가 : 정의 데이터 형식
에 대한
값이 너무 커서 ...하지만이 발생할 수 모르겠어요.
이것은 항상 프로그램을 실행중인 현재 작업 디렉토리를 인쇄합니다. 그렇더라도 실제로는 "."이외의 디렉토리에있는 파일을 나열하지 않습니다. 및 "..". 뭐라 구요? 어떤 종류의 허가 문제가 있습니까? 이 솔루션은 2017 년에 작동하지 않습니까?
컴파일하고 실행 한 상태로 나와 잘 작동합니다. '/ home/adirectory'에 대한 읽기 및 실행 권한을 가지고 있습니까? 'cd/home/adirectory'를 시도해보고'ls'을하고 결과를 얻을 수 있는지보십시오. – lurker
리눅스에서 괜찮습니다. 디렉토리를 내 홈 디렉토리로 변경했습니다. – wallyk
읽기 권한 만 필요합니까? – LBaelish