티스토리 뷰

안녕하세요.


신랑각시의 신랑 입니다.


일하면서 간혹 파일이 존재하는 디렉토리를 삭제해야 하는 경우가 생깁니다.


아래 주석 부분은, man page 를 참조하여 callback 함수의 parameter 별 의미를 확인하고자 적어 놓은 것 입니다.


실제 사용에서는 삭제해도 무방할 듯 합니다.

(저는 항상 잊어 버리기 때문에 그냥 주석 처리 상태로 올립니다. )


#include <iostream>
#include <string>
#include <ftw.h>
#include <sys types.h>
#include <sys stat.h>
#include <unistd.h>
#include <errno.h>
#include <cstring>
int main(int argc, char * argv[])
{
    if(argc != 2)
    {
        std::cout << "invalid argument" << std::endl;
        return 0;
    }
    if(nftw(argv[1],
            [](const char * fpath, const struct stat * sb, int tflag, struct FTW * ftwbuf) -> int {
                /*-
                // START - 테스트를 위함 ////
                if(tflag == FTW_F)
                    std::cout << " FILE ";
                else if(tflag == FTW_DP)
                    std::cout << " DIR  ";
                else if(tflag == FTW_DNR)
                    std::cout << " unreadable DIR  ";
                else if(tflag == FTW_SL)
                    std::cout << " LINK ";
                else if(tflag == FTW_NS)
                    std::cout << " NS";
                else
                {
                    std::cout << "# " << FTW_F << " ";
                    std::cout << " " << tflag << " ";
                }
                std::cout << " LEVEL:" << ftwbuf->level << " ";
                std::cout << " PATH: " << fpath << " ";
                std::cout << " BASE: " << ftwbuf->base << " ";
                std::cout << " LAST: " << fpath + ftwbuf->base << std::endl;
                // END ////////////////////////
                -*/
                int ret = remove(fpath);
                std::cout << "REMOVE : " << ret << " NAME:" << fpath << std::endl;
                return 0;
            },
            2,
            FTW_DEPTH | FTW_MOUNT | FTW_PHYS) != 0)
    {
        std::cout << "nftw fail " << errno << ":" << strerror(errno) << std::endl;
        return 0;
    }
    std::cout << "success" << std::endl;
    return 0;
}
댓글