-
C/C++ rewinddir(3)C,C++ & Linux 2020. 5. 20. 16:15728x90
rewinddir(3) 함수 기능
디렉토리 포인터를 다시 처음으로 돌려놓는 함수입니다.
보통 opendir() 이후에 readdir() 을 하다가 다시 처음부터 탐색하고 싶은 경우 사용합니다.
함수 원형
#include <dirent.h> void rewinddir(DIR *dp);
매개변수
dp
rewind 할 DIR 포인터
반환값
void
예제
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <dirent.h> #include <string.h> #include <sys/stat.h> #include <sys/types.h> #define DIRECTORY_SIZE MAXNAMLEN int main(int argc, char *argv[]) { struct dirent *dentry; struct stat statbuf; char filename[DIRECTORY_SIZE + 1]; DIR *dirp; // argv[1] 디렉토리를 열고, 해당 디렉토리로 작업 디렉토리를 옮김 if ((dirp = opendir(argv[1])) == NULL || chdir(argv[1]) == -1) { fprintf(stderr, "opendir, chdir error for %s\n", argv[1]); exit(1); } // argv[1]을 가리키는 dirp // dirp 를 readdir()하며 순회 // 즉 argv[1] 내부에 있는 모든 파일을 읽어들임 while ((dentry = readdir(dirp)) != NULL) { if (dentry->d_ino == 0) continue; // dentry->d_name : 파일명 // filename 에 파일명 복사 // 이때 중요한점은 filename에는 경로가 아닌 파일명만 복사된다는 것임 // 따라서 mydir/test.c 가 아닌 test.c만 복사 memcpy(filename, dentry->d_name, DIRECTORY_SIZE); // filename으로 해당 파일에 대한 정보를 뽑아냄 // test.c 만으로 파일정보를 뽑아오기 위해 18번 라인에서 chdir을 한 것임 if (stat(filename, &statbuf) == -1) { fprintf(stderr, "stat error for %s\n", filename); break; } // 일반 파일이면 파일명에 이어 크기까지 출력 if ((statbuf.st_mode & S_IFMT) == S_IFREG) printf("%-14s %ld\n", filename, statbuf.st_size); else printf("%-14s\n", filename); } // dirp 초기화 rewinddir(dirp); // 다시 읽기 while ((dentry = readdir(dirp)) != NULL) { printf("%s\n", dentry->d_name); } exit(0); }
결과
리눅스시스템프로그래밍 저자 : 홍지만
https://book.naver.com/bookdb/book_detail.nhn?bid=14623672
책에 기술된 예제 프로그램입니다. 책 내부에는 훨씬 더 많은 자료가 있습니다. (개인적으로 좋았습니다.)'C,C++ & Linux' 카테고리의 다른 글
C/C++ telldir(3) seekdir(3) (0) 2020.05.20 C/C++ closedir(3) (0) 2020.05.20 C/C++ readdir(3) (0) 2020.05.20 C/C++ opendir(3) (0) 2020.05.20 C/C++ rmdir(2) (0) 2020.05.19