Web性能壓力測試工具WebBench學習筆記

Web性能壓力測試工具WebBench學習筆記

源代碼學習

struct option

初始化結構體數組:const struct option longOptions[],其原型定義在getopt.h中:

#define no_argument       0
#define required_argument  1
#define optional_argument  2

struct option {
   const char *name;
   int has_arg;
   int *flag;
   int val;
};

const char *name是不帶短橫線的選項名,前面沒有短橫線。譬如“help”、“verbose”之類。
int has_arg描述了選項是否有選項參數。如果有,是哪種類型的參數,此時,它的值一定是下表中的一個。
符號常量數值含義:
no_argument 0 選項沒有參數
required_argument 1 選項需要參數
optional_argument 2 選項參數可選

int *flag 如果這個指針爲NULL,那麼getopt_long()返回該結構val字段中的數值。如果該指針不爲NULL,getopt_long()會使得它所指向的變量中填入val字段中的數值,並且getopt_long()返回0。如果flag不是NULL,但未發現長選項,那麼它所指向的變量的數值不變。

int val 這個值是發現了長選項時的返回值,或者flag不是NULL時載入*flag中的值。典型情況下,若flag不是NULL,那麼val是個真/假值,譬如1或0;另一方面,如果flag是NULL,那麼val通常是字符常量,若長選項與短選項一致,那麼該字符常量應該與optstring中出現的這個選項的參數相同。

int main(int argc, char *argv[])
{
    intopt;
    charfilename[512];
    intopen_flag = 0;
    while((opt =getopt(argc, argv, “hf:vo")) != -1) {
       switch(opt) {
       case ‘v': printf(“ver 3.1);break;
       case ‘h':usage();break;
       case ‘o’: open_flag =1 ;break;
       case 'f':
           printf("filename: %s\n", optarg);
           
           strncpy(filename,optarg,sizeof(filename)-1);
           break;
       case::
           printf("option %c needs a value\n ", optopt);
           break;
       case?:
           printf("unknown option: %c\n", optopt);
           break;
       }
    }

getopt_long解析

getopt_long()是一種函數,被用來解析命令行選項參數。
原型:

int getopt_long(int argc, char * const argv[],
const char *optstring,
const struct option *longopts, int *longindex);

函數中的argc和argv通常直接從main()的兩個參數傳遞而來。optsting是選項參數組成的字符串:
字符串optstring可以下列元素:
1.單個字符,表示選項,
2.單個字符後接一個冒號:表示該選項後必須跟一個參數。參數緊跟在選項後或者以空格隔開。該參數的指針賦給optarg。
3 單個字符後跟兩個冒號,表示該選項後可以有參數也可以沒有參數。如果有參數,參數必須緊跟在選項後不能以空格隔開。該參數的指針賦給optarg。(這個特性是GNU的擴張)。
optstring是一個字符串,表示可以接受的參數。例如,“a🅱️cd”,表示可以接受的參數是a,b,c,d,其中,a和b參數後面跟有更多的參數值。(例如:-a host -b name)

sigaction

sigaction是一個函數,可以用來查詢或設置信號處理方式。
sigaction(查詢或設置信號處理方式)
相關函數 signal,sigprocmask() ,sigpending,sigsuspend, sigemptyset
表頭文件 #include<signal.h>
定義函數 int sigaction(int signum,const struct sigaction *act ,struct sigaction *oldact);
如參數結構sigaction定義如下
struct sigaction {
void (*sa_handler)(int);
void (*sa_sigaction)(int, siginfo_t *, void *);
sigset_t sa_mask;
int sa_flags;
void (*sa_restorer)(void);
};

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章