第一次实习,在CSDN中稍微记录一下学习到的东西。
在大学时常被长辈教导要好好写全main函数的参数argc和argv。
#include <stdio.h>
int main(int argc, char* argv[]){
/* TODO xxxx */
balabala;
return 0;
}
虽然知道argc和argv的作用。但总觉得使用起来不方便,比如在windows中使用shutdown命令:
# 1min 后关机
shutdown -s -t 60
##上述命令在main函数中可以得到:
# argc = 4
# **argv = ["shutdown", "-s", "-t", "0"]。
通常命令中的-s、-t为可选参数,因此直接判断argv中的字符串进行操作较为不便。而最近查阅学习到的getopt()和getopt_long()函数能很有效地解决这个问题。
getopt()与getopt_long()
getopt()与getopt_long()在linux.die.net中有函数声明和介绍。其中声明如下:
#include <unistd.h>
int getopt(int argc, char * const argv[],
const char *optstring);
extern char *optarg;
extern int optind, opterr, optopt;
#include <getopt.h>
int getopt_long(int argc, char * const argv[],
const char *optstring,
const struct option *longopts, int *longindex);
int getopt_long_only(int argc, char * const argv[],
const char *optstring,
const struct option *longopts, int *longindex);
可以发现声明的三种getopt函数中的3个参数是相同的。从命名上可以看出,前2个参数与main的2个参数相同,实际使用时直接将它们传入即可。
参数optstring是一个包含 字母a-z和冒号: 的字符串,在getopt函数中会根据传入的短参数(如-s)和optstring中的字母字符进行比对。
1. getopt()
下面以一个使用getopt()函数的代码为例:
/* 编译后生成名为test的可执行文件 */
#include <stdio.h>
#include <unistd.h>
int
main(int argc, char* argv[])
{
char* optstring = "ab:c::&#