⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xgetopt.c

📁 linux下开发的针对所有磁盘的数据恢复的源码
💻 C
字号:
/* * The Sleuth Kit  */// XGetopt.cpp  Version 1.2//// Author:  Hans Dietrich//          hdietrich2@hotmail.com//// Description://     XGetopt.cpp implements getopt(), a function to parse command lines.//// History//     Version 1.2 - 2003 May 17//     - Added Unicode support////     Version 1.1 - 2002 March 10//     - Added example to XGetopt.cpp module header //// This software is released into the public domain.// You are free to use it in any way you like.//// This software is provided "as is" with no expressed// or implied warranty.  I accept no liability for any// damage or loss of business that this software may cause.//////////////////////////////////////////////////////////////////////////////////** \file XGetopt.c * Parses arguments for win32 programs -- written by Hans Dietrich. */#include "tsk_base_i.h"#ifdef TSK_WIN32///////////////////////////////////////////////////////////////////////////////// if you are using precompiled headers then include this line://#include "stdafx.h"//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// if you are not using precompiled headers then include these lines:#include <wchar.h>//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  X G e t o p t . c p p//////  NAME//       getopt -- parse command line options////  SYNOPSIS//       int getopt(int argc, TSK_TCHAR *argv[], TSK_TCHAR *optstring)////       extern TSK_TCHAR *optarg;//       extern int optind;////  DESCRIPTION//       The getopt() function parses the command line arguments. Its//       arguments argc and argv are the argument count and array as//       passed into the application on program invocation.  In the case//       of Visual C++ programs, argc and argv are available via the//       variables __argc and __argv (double underscores), respectively.//       getopt returns the next option letter in argv that matches a//       letter in optstring.  (Note:  Unicode programs should use//       __targv instead of __argv.  Also, all character and string//       literals should be enclosed in _TSK_T( ) ).////       optstring is a string of recognized option letters;  if a letter//       is followed by a colon, the option is expected to have an argument//       that may or may not be separated from it by white space.  optarg//       is set to point to the start of the option argument on return from//       getopt.////       Option letters may be combined, e.g., "-ab" is equivalent to//       "-a -b".  Option letters are case sensitive.////       getopt places in the external variable optind the argv index//       of the next argument to be processed.  optind is initialized//       to 0 before the first call to getopt.////       When all options have been processed (i.e., up to the first//       non-option argument), getopt returns EOF, optarg will point//       to the argument, and optind will be set to the argv index of//       the argument.  If there are no non-option arguments, optarg//       will be set to NULL.////       The special option "--" may be used to delimit the end of the//       options;  EOF will be returned, and "--" (and everything after it)//       will be skipped.////  RETURN VALUE//       For option letters contained in the string optstring, getopt//       will return the option letter.  getopt returns a question mark (?)//       when it encounters an option letter not included in optstring.//       EOF is returned when processing is finished.////  BUGS//       1)  Long options are not supported.//       2)  The GNU double-colon extension is not supported.//       3)  The environment variable POSIXLY_CORRECT is not supported.//       4)  The + syntax is not supported.//       5)  The automatic permutation of arguments is not supported.//       6)  This implementation of getopt() returns EOF if an error is//           encountered, instead of -1 as the latest standard requires.////  EXAMPLE//       BOOL CMyApp::ProcessCommandLine(int argc, TSK_TCHAR *argv[])//       {//           int c;////           while ((c = getopt(argc, argv, _TSK_T("aBn:"))) != EOF)//           {//               switch (c)//               {//                   case _TSK_T('a')://                       TRACE(_TSK_T("option a\n"));//                       ////                       // set some flag here//                       ////                       break;////                   case _TSK_T('B')://                       TRACE( _TSK_T("option B\n"));//                       ////                       // set some other flag here//                       ////                       break;////                   case _TSK_T('n')://                       TRACE(_TSK_T("option n: value=%d\n"), atoi(optarg));//                       ////                       // do something with value here//                       ////                       break;////                   case _TSK_T('?')://                       TRACE(_TSK_T("ERROR: illegal option %s\n"), argv[optind-1]);//                       return FALSE;//                       break;////                   default://                       TRACE(_TSK_T("WARNING: no handler for option %c\n"), c);//                       return FALSE;//                       break;//               }//           }//           ////           // check for non-option args here//           ////           return TRUE;//       }/////////////////////////////////////////////////////////////////////////////////TSK_TCHAR *tsk_optarg;          // global argument pointerint tsk_optind = 0;             // global argv indexinttsk_getopt(int argc, TSK_TCHAR * const argv[], const TSK_TCHAR * optstring){    static TSK_TCHAR *next = NULL;    TSK_TCHAR c, *cp;    if (tsk_optind == 0)        next = NULL;    tsk_optarg = NULL;    if (next == NULL || *next == _TSK_T('\0')) {        if (tsk_optind == 0)            tsk_optind++;        if (tsk_optind >= argc || argv[tsk_optind][0] != _TSK_T('-')            || argv[tsk_optind][1] == _TSK_T('\0')) {            tsk_optarg = NULL;            if (tsk_optind < argc)                tsk_optarg = argv[tsk_optind];            return EOF;        }        if (TSTRCMP(argv[tsk_optind], _TSK_T("--")) == 0) {            tsk_optind++;            tsk_optarg = NULL;            if (tsk_optind < argc)                tsk_optarg = argv[tsk_optind];            return EOF;        }        next = argv[tsk_optind];        next++;                 // skip past -        tsk_optind++;    }    c = *next++;    cp = (TSK_TCHAR *)TSTRCHR(optstring, c);    if (cp == NULL || c == _TSK_T(':'))        return _TSK_T('?');    cp++;    if (*cp == _TSK_T(':')) {        if (*next != _TSK_T('\0')) {            tsk_optarg = next;            next = NULL;        }        else if (tsk_optind < argc) {            tsk_optarg = argv[tsk_optind];            tsk_optind++;        }        else {            return _TSK_T('?');        }    }    return c;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -