리눅스 C 파일입출력 lstat() 함수 질문이 있습니다.
글쓴이: wone28 / 작성시간: 목, 2016/07/14 - 11:43오후
#include <stdio.h> #include <sys/stat.h> #include <dirent.h> #include <unistd.h> #include <sys/types.h> int main() { DIR *dir_info; struct dirent *dir; struct stat st; dir_info = opendir("."); if(dir_info != NULL) { while(dir = readdir(dir_info)) { lstat(dir->d_name, &st); if(S_ISREG(st.st_mode)) { printf("[dir] %s\n", dir->d_name); } else if(S_ISDIR(st.st_mode)) { printf("[geshifilter-reg] %s\n", dir->d_name); } } } closedir(dir_info); return 0; }
#include <stdio.h> #include <sys/stat.h> #include <dirent.h> #include <unistd.h> #include <sys/types.h> int main() { DIR *dir_info; struct dirent *dir; struct stat *st; dir_info = opendir("."); if(dir_info != NULL) { while(dir = readdir(dir_info)) { lstat(dir->d_name, st); if(S_ISREG(st->st_mode)) { printf("[dir] %s\n", dir->d_name); } else if(S_ISDIR(st->st_mode)) { printf("[reg] %s\n", dir->d_name); } } } closedir(dir_info); return 0; }
위와 같이 코드를 수정했는데 세그먼트 오류가 나옵니다. DIR 과 struct dirent 처럼 포인터 변수로 선언하면 왜 오류가 나오는지 궁금합니다.
[/geshifilter-reg]Forums:
첫 번째 경우는 struct stat st; 라고
첫 번째 경우는
struct stat st;
라고 변수를 선언하고, 해당 변수의 주소를 lstat() 함수에 넘겨 줬습니다.
lstat() 함수는 해당 주소를 참조해서 결과값을 변수에 채워 넣습니다.
두 번째 경우는 lstat() 함수를 호출할 때 제대로 된 주소값을 주지 않았습니다.
lstat() 함수는 잘못된 주소를 참조해서 결과값을 채워 넣으려다가 오류가 난 겁니다.
답글 감사합니다.
포인터에 대한 이해가 부족했네요. 감사합니다
댓글 달기