/* recuva.c - recovery deleted files. * Copyright(c) 2009 Lee Ho Jin(shad0w) * e-mail : r3e2f1@chol.com * * This program is free software. */ #include #include #include #include #include #include #include #include #define _GNU_SOURCE #include // 프로그램 이름과 버전 const char *program_name; const char *version_string = "0.0.1"; // 긴 옵션 // { name, has_arg, flag, val } static struct option longopts[] = { {"delete", true, NULL, 'd'}, {"find", true, NULL, 'f'}, {"help", false, NULL, 'h'}, {"list", false, NULL, 'l'}, {"recover", true, NULL, 'r'}, {"secure", true, NULL, 's'}, {"version", false, NULL, 'v'} }; // 짧은 옵션 static const char *shortopts = "d:f:hlr:s:v"; /** * usage - 프로그램 사용방법을 표준 에러로 출력 * @status : 프로그램 종료 상태를 나타냄 * * return : NONE */ static void usage( int status ) { if( status != EXIT_SUCCESS ) { fprintf( stderr, "Try '%s -h' for more information.\n\n", program_name ); fprintf( stderr, "Usage : %s [OPTION] parameters\n", program_name ); fputs( " -d, --delete=INODE : Delete to cache entry\n", stderr ); fputs( " -f, --find=FILENAME : Find the cache entry\n", stderr ); fputs( " -h, --help : This small usage guide\n", stderr ); fputs( " -l, --list : Display to cache entrys\n", stderr ); fputs( " -r, --recover=INODE : Recover deleted files in the cache\n", stderr ); fputs( " -s, --secure=INODE : Secure deletion to cache entry\n", stderr ); fputs( " -v, --version : Output version information\n", stderr ); fputs( "\nReport bugs to \n", stderr ); } exit( status ); } /** * display_version - 프로그램의 버전 정보를 출력 * @ * * return : NONE */ static void display_version( void ) { fprintf( stderr, "%s version %s\n", program_name, version_string ); exit( EXIT_SUCCESS ); } /** * main - 메인 함수 * @argc : 인자 수 * @argv : 인자 명 * * return : 0 */ int main( int argc, char **argv ) { int optc; // 옵션 인자 문자 extern char *optarg; // 옵션이 값을 가지면 저장 extern int optopt; // 알 수 없는 옵션 extern int optind; // 처리할 다음 인자의 인덱션 program_name = argv[0]; // 인자가 하나도 없을 경우 if( argc == 1 ) usage( EXIT_FAILURE ); // 인자 처리 while( ( optc = getopt_long( argc, argv, shortopts, longopts, NULL ) ) != -1 ) { switch( optc ) { case 'd': break; case 'f': break; case 'h': usage( EXIT_FAILURE ); break; case 'l': break; case 'r': break; case 's': break; case 'v': display_version(); break; case ':': printf( "Option needs a value : %c\n", optopt ); break; case '?': printf( "Unknown options : %c\n", optopt ); break; default: usage( EXIT_FAILURE ); break; } } // while( ( optc = ...) != -1 ) // 처리한 인자 외 처리되지 않은 인자르 출력함 for( ; optind < argc; optind++ ) printf( "Argument : %s\n", argv[optind] ); return 0; }