getopt_long為解析命令列引數函式,它是linux c庫函式。使用此函式需要包含系統標頭檔案getopt.h。
getopt_long函式宣告如下:
int getopt_long(int argc, char * const argv, const char *optstring, const struct option *longopts, int *longindex);
getopt_long的工作方式與getopt類似,關於getopt的介紹可以參考: 。但是getopt_long除了接受短選項外還接受長選項,長選項以"--"開頭。如果程式只接受長選項,那麼optstring應指定為空字串。如果縮寫是唯一的,那麼長選項名稱可以縮寫。長選項可以採用兩種形式:--arg=param或--arg param. longopts是乙個指標指向結構體option陣列。
結構體option宣告如下:
struct option ;
name:長選項的名字
has_arg:0,不需要引數;1,需要引數;2,引數是可選的
flag:指定如何為長選項返回結果。如果flag是null,那麼getopt_long返回val(可以將val設定為等效的短選項字元),否則getopt_long返回0.
val:要返回的值。
結構體option陣列的最後乙個元素必須用零填充。
當乙個短選項字元被識別時,getopt_long也返回選項字元。對於長選項,如果flag是null,則返回val,否則返回0。返回-1和錯誤處理方式與getopt相同。
cmakelists.txt檔案內容如下:
project(samples_cplusplus)
cmake_minimum_required(version 3.0)
# 支援c++11
set(cmake_c_flags "$ -g -wall -o2 -std=c11")
set(cmake_cxx_flags "$ -g -wall -o2 -std=c++11")
include_directories($)
file(glob samples $/*.cpp)
foreach (sample $)
string(regex match "[^/]+$" sample_file $)
string(replace ".cpp" "" sample_basename $)
add_executable(test_$ $)
target_link_libraries(test_$ pthread)
endforeach()
sample_getopt_long.cpp內容如下:
#include #include #include int main(int argc, char* argv)
, ,,,
,};
c = getopt_long(argc, argv, "abc:d:012", long_options, &option_index);
if (c == -1) break;
switch (c)
} if (optind < argc)
exit(exit_success);
}
bash.sh內容如下:
#! /bin/bash
real_path=$(realpath $0)
dir_name=`dirname "$"`
echo "real_path: $, dir_name: $"
new_dir_name=$/build
mkdir -p $
cd $
cmake ..
make
cd -
run_getopt_long.sh內容如下:
#! /bin/bash
real_path=$(realpath $0)
dir_name=`dirname "$"`
echo "real_path: $, dir_name: $"
echo -e "\n\ntest argv1:"; $/build/test_sample_getopt_long
echo -e "\n\ntest argv2:"; $/build/test_sample_getopt_long -?
echo -e "\n\ntest argv3:"; $/build/test_sample_getopt_long --add ***
echo -e "\n\ntest argv4:"; $/build/test_sample_getopt_long -a xx -b yy -c zz -d rr -0 ss -1 tt -2 qq
echo -e "\n\ntest argv6:"; $/build/test_sample_getopt_long -*** yyy
echo -e "\n\ntest argv7:"; $/build/test_sample_getopt_long -a
執行過程:首先執行build.sh,然後再執行run_getopt_long.sh即可。
github:
Linux下Redis下安裝
redis安裝 檢查是否安裝redis ps ef grep redis2.檢查gcc服務是否安裝成功 rpm qa grep gcc注 安裝成功則顯示 mkdir redis5.解壓redis安裝包 tar zxvf redis 2.8.17 tar.gz c usr local redis 解壓...
Linux下程式設計
windows下我的環境為 windows10 vs2015 opencv3.4.0 opencv3.4.0 contrib python linux下我的環境為 ubuntu16004 也有ubuntu1804 opencv3.4.0 opencv3.4.0 contrib python gnu ...
linux下萬用字元
萬用字元是一類鍵盤字元,有星號 和問號 當查詢檔案呀資料夾時,可以使用它來代替乙個或多個真正字元 當不知道真正字元或者不想建入完整名字時,常常使用萬用字元代替乙個或多個真正字元。星號 可以使用星號代替0個或多個字元。如果正在查詢以aew開頭的乙個檔案,但不記得檔名其餘部分,可以輸入aew,查詢以ae...