반응형
Linux C : 파일이나 폴더 조회하기
알게된 배경
라즈베리 파이의 라즈비안에서 프로그램으로 파일관리를 하기 위해서 사용하였다. 물론 소스코드 작성은 우분투에서 작성하여 먼저 테스트를 진행 했었다.
소스 코드
// Ls.h
#include <stdio.h>
#include <dirent.h>
typedef enum {false, true}bool;
bool isFile(const unsigned char type);
bool isFolder(const unsigned char type);
void ls(const char* path, const bool isFile);
// Ls.c
#include "Ls.h"
bool isFile(const unsigned char type)
{
return type == 0x08;
}
bool isFolder(const unsigned char type)
{
return type == 0x04;
}
// 실제 파일이나 폴더리스트를 가져오는 함수
// 인자는 1:초기 경로, 2:true일경우 파일명, false일경우 폴더명
void ls(const char* path, const bool isFile)
{
DIR* dir;
struct dirent* ent;
if(NULL != (dir = opendir(path)) )
{
while(NULL != (ent = readdir(dir)) )
{
if(isFile? isFile(ent->d_type) : isFolder(ent->d_type) )
{
printf("%s\n", ent->d_name);
}
}
closedir(dir);
}
else
{
perror("could not open directory");
}
}
추가 참조 사항
더 궁금한 점이 있다면, dirent 구조체에 대해서 조사하도록 하자. dirent.h 파일은 디렉토리나 같은 파일 시스템과 관련된 함수들이 있다.
C++에서는 cdirent가 없기 때문에 C의 함수를 가져와서 사용해야 한다. 다른 대체 방법이 있는 걸 아시는 분은 댓글로 피드백을 준다면 환영한다.
참고자료
반응형
'C' 카테고리의 다른 글
리눅스 C : TCP 소켓 프로그램 (0) | 2017.05.24 |
---|---|
리눅스/윈도우 C : 현재날짜와 시간 가져오기 (0) | 2017.04.25 |
C : 구조체를 네임스페이스처럼 사용하기 (0) | 2017.04.22 |
C : 문자열 숫자 변환 (0) | 2017.04.21 |
C : extern 키워드 (0) | 2016.11.28 |