가끔 필요하지만 막상구현하려면 귀찮는 함수 ^^

파일이 존재하는 디렉토리 지우는 C코드입니다.

출처 : http://kldp.org/node/108793
위 출처에서 clique 님이 작성하신 코드를 조금 수정했습니다.

ftw(), nftw()라는 file tree walking(traversing) 함수가 있습니다. SUS에 속해 있죠
http://www.opengroup.org/onlinepubs/9699919799/
기본적으로는 pre-order traverse입니다만, 옵션을 줘서 post-order로 traverse할 수 있습니다.


#define _XOPEN_SOURCE 500
#include <ftw.h>
#include <stdio.h>
#include <stdlib.h>

static int rmdir_helper(const char *fpath, const struct stat *sb, int tflag, struct FTW *ftwbuf)
{
    switch ( tflag )
    {
    case FTW_D:
    case FTW_DP:
        if ( rmdir(fpath) == -1 )
            perror("unlink");
        break;
    case FTW_F:
    case FTW_SL:
        if ( unlink(fpath) == -1 )
            perror("unlink");
        break;
    default:
        puts("do nothing");
    }
    return 0;
}

int rmdir_rf(const char * dir_to_remove)
{
    int flags = 0;

    if ( dir_to_remove == NULL )
        return 1;

    flags |= FTW_DEPTH; // post-order traverse

    if (nftw(dir_to_remove, rmdir_helper, 10, flags) == -1)
        perror("nftw");
        exit(EXIT_FAILURE);
    

    return 0;
}


int main(int argc, char *argv[])
{
    if ( argc == 2 )
        rmdir_rf(argv[1]);
    return 0;
}

Posted by kabangkle