stat() 함수 사용할때...
글쓴이: boiler4 / 작성시간: 목, 2009/07/16 - 1:47오후
stat(char * path, struct stat * statbuf) path =조사할 파일의 path statbuf = 조사 내용(file size, name, last modification 등등)을 담을 구조체. 입니다.. 근데. 제가 해본 결과.. 조사할 파일이 이(조사하는 실행) test app 과 같은 directory에 있으면 정확한 값(ls -al과 비교했을때)을 읽어 오는데. test appcation과 조사할 파일이 서로 다른 디렉토리에 있는 경우에 file size 값을 제대로 읽어오지 못하네요.. 왜이런거죠.. 제가 뭘 잘 못한건 가요?? 아래의 code는 주어진 directory에서 찾을려는 file과 이름이 같은 file이 들어있나 찾아보고 있으면 그 파일의 file size, last modification time 등등을 구해 옮니다. 근데.. 다 잘되는데..딱.. file size 값이 앞서 말한거 처럼 서로 다른 디렉토리에 실행파일과 찾을려는 파일이 있을때 file size 값만 엉뚱한 값이 나옴니다.. [code] if ((dirp = <span>opendir</span>(dirPath)) == NULL) { perror("could not open"); return 1; } int exist=0; do { errno = 0; if (((dp = <span>readdir</span>(dirp)) != NULL) && (exist == 0)) { if(strcmp (dp->d_name, fileInfo->fileName) == 0) { exist = 1; S_DST_FS_DIR_CONTENT Temp; Temp.dirName = dirPath; Temp.fileName = (char *)dp->d_name; /*pass the file name*/ <span>stat(Temp.fileName, &statbuf); /*working directory default?*/</span> Temp.size = (off_t) statbuf.st_size; Temp.time = (long) statbuf.st_ctime; insertDirContent(fileInfo, &Temp); /* add to linked list!! */ } } } while (dp != NULL);
Forums:
경로 문제 입니다.
위의 코드에서 readdir 같은 경우는 diropen()에서 얻은 포인터로 디렉토리의 파일 목록을 읽어들이고 구조체에 저장한 후, 그대로 stat()에 넘겨주고 있습니다.
그렇지만 readdir()이 넘겨주는 파일명들은 경로 정보 없이 단지 파일명만 저장되어 있습니다.
그러면, stat(char * path, struct stat * statbuf)에서 path 값에 파일명만 넘겨 주게 되고 현재 프로그램을 실행한 디렉토리 안에서 해당 file명을 검색할 것이기 때문에 stat()은 error를 리턴 합니다.
위의 코드에서 stat의 리턴 값을 체크하도록 코드를 추가해보세요.
아.. 그렇구나..
아.. 그거구나..
완전 감사합니다.
Hello~
Hello~
댓글 달기