C程式起點main函式
main
c
語言中main
函式接收兩個引數int argc
, char* argv[]
int main(int argc, char* argv[]);
int main(int argc, char** argv);
如上,argc
代表引數的數量,argv
但是引數字串指標陣列
./program -i 192.168.0.1 -p 2000
此時共有五個引數,
argv[0] --> ./program
argv[1] --> -i
argv[2] --> 192.168.0.1
argv[3] --> -p
argv[4] --> 2000
那麼我們怎麼去接收這些引數並去識別,那麼就要用到getopt.h
的getopt()
函式了。
int getopt(int argc, char** argv, char* optstring);
第一個引數、第二個引數對應即可,第三個引數接收的是選項如"i:p:"
,i
、p
代表選項,:
代表其後接收一個引數。每個選項例如"-i"
這個函式會直接過濾掉-
,每次獲取時會自動將:
後的引數傳入到optarg
,下次獲取會直接跳到下一個選項。此函式的返回值為選項'i'
的ASCII
碼值。
例項
int main(int argc, int char){
// 判斷引數
if(argc < 5) return -1;
int ret = 0;
char* ip =NULL;
int port = 0;
// i,p表示兩個命令,:表示需要一個引數
while ((ret = getopt(argc, argv, "i:p:")) != EOF){
// printf("char is %c\n", ret);
switch (ret)
{
case 'i':
// printf("optarg: %s\n", optarg);
ip = optarg;
break;
case 'p':
// printf("optarg: %s\n", optarg);
port = atoi(optarg);
break;
default:
break;
}
}
printf("ip: %s, port: %d\n", ip, port);
return 0;
}
注意
如果有長命令的輸入需求的話,可以使用getopt_long
函式
int getopt(int argc, char * const argv[], const char *optstring);