Linux下getopt long函式的使用

2021-08-21 14:29:50 字數 2670 閱讀 2191

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...