반응형

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의 함수를 가져와서 사용해야 한다. 다른 대체 방법이 있는 걸 아시는 분은 댓글로 피드백을 준다면 환영한다.


참고자료

커뮤니티: 파일 및 폴더 명 받기

블로그: dirent 구조체에 대한 설명

반응형

+ Recent posts