t:使用getopt改写main函数

1 篇文章 0 订阅
一、运行EES_Test
  1. 原始的输入方式
    a. 首先进入可执行文件所在的目录
    cd /home/lihaoliang/eclipse-workspace/NicheBreadth/Default
    b. 执行可执行文件,并附带参数
    ./NicheBreadth /home/lihaoliang/EES_Test scenario.seed_1.dispersal_good.nb_medium /home/lihaoliang/EES_Test/Results 64000 1 1 1

表1: 参数列表

NumParavalue
1base_folder/home/lihaoliang/EES_Test
2scenario_configscenario.seed_1.dispersal_good.nb_medium
3result_folder/home/lihaoliang/EES_Test/Results
4memory_limit(in M)64000
5is_overwrite1
6with_detail1
7is_SQLite1
  1. 使用get_optlong()函数
NumParavalue缺省值
1base_folderb/home/lihaoliang/EES_Test
2scenario_configescenario.seed_1.dispersal_good.nb_medium
3result_folderr/home/lihaoliang/EES_Test/Results
4memory_limit(in M)m64000
5is_overwritev1
6with_detaild1
7is_SQLites1
  1. code
int main( int argc, char *argv[] )
{
	int opt;
    int digit_optind = 0;
    int option_index = 0;

	static const char *optString = "b:e:r:m:v:d:s:?h";

	static const struct option longOpts[] = {
		{ "base_folder", required_argument, NULL, 'b' },  // 1
		{ "scenario_config", required_argument, NULL, 'e' },  // 2
		{ "result_folder", required_argument, NULL, 'r' },  // 3
		{ "memory_limit", optional_argument, NULL, 'm' },  // 4
		{ "is_overwrite", optional_argument, NULL, 'v' },  // 5
		{ "with_detail", optional_argument, NULL, 'd' },  // 6
		{ "is_SQLite", optional_argument, NULL, 's' },  // 7
		
		{ "help", no_argument, NULL, 'h' },
		{ NULL, no_argument, NULL, 0 }
	};

	char base_folder[100];
	char scenario_id[100];
	char result_folder[100];
	unsigned long memory_limit = 64000;
	bool is_overwrite = 1;
	bool with_detail = 1;
	bool is_sqlite =  1;

	while((opt = getopt_long(argc,argv,optString,longOpts,&option_index))!= -1)
	{
		char temp;
		if(*optarg ==  '-') {
			printf("please enter right argv\r\n");
			printf("you can enter -h --help -? to get help\r\n");
			exit( EXIT_FAILURE );
    	}
		switch( opt ) {

			case 'b':
		    	strcpy(base_folder, optarg);
		    	// later to determine wheather the argv is right 
				break;

			case 'i':
		    	strcpy(scenario_id, optarg);
		    	// later to determine wheather the argv is right 
				break;

			case 'r':				
		    	strcpy(result_folder, optarg);
		    	// later to determine wheather the argv is right 
				break;
				
			case 'm': // memory_limit
			{
				unsigned long memory_limit_temp = atoi(optarg);
				// if no argv -- NULL && atoi(optarg)!=0 then memory_limit=1
				// else memory_limit=0
				if(memory_limit_temp >= 0) {
					memory_limit = memory_limit_temp;
				}
				else
				{
					printf("please enter memory_limit in range [100, +]\r\n");
					printf("you can enter -h --help -? to get help\r\n");
				}
				break;
			}

			case 'v': // is_overwrite
				printf("optarg=%s\n",optarg );
				temp = atoi(optarg);
				printf("temp=%d\n", temp);
				if(temp == 0) {
					is_overwrite = 0;
				}
				break;

			case 'd': // with_detail
				temp = atoi(optarg);
				if(temp == 0) {
					with_detail = 0;
				}
				break;

			case 's': // is_SQLite
				temp = atoi(optarg);
				if(temp == 0) {
					is_sqlite = 0;
				}
				break;
				
			case 'h':	/* fall-through is intentional */
			case '?':
				display_usage();
				break;

			case 0:		/* long option without a short arg */
				printf("err!\n");
				break;
				
			default:
				/* You won't actually get here. */
				break;
		}
	}
	
	printf("\n*\nresult\n*\n");
	printf( "base_folder: %s\n", base_folder );
	printf( "scenario_config: %s\n", scenario_id );
	printf( "result_folder: %s\n", result_folder );

	printf( "memory_limit: %ld\n", memory_limit );

	printf( "is_overwrite: %d\n", is_overwrite );
	printf( "with_detail: %d\n", with_detail );
	printf( "is_SQLite: %d\n", is_sqlite );
	return EXIT_SUCCESS;
}

先定框架,在不断细节化!

改变后指令
./NicheBreadth ./NicheBreadth -b /home/lihaoliang/EES_Test -e scenario.seed_1.dispersal_good.nb_medium -r /home/lihaoliang/EES_Test/Results -m 64000 -v 1 -d 1 -s 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值