首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Linux getopt 函數詳解:命令行參數解析標準實踐

     編輯:關於C語言

Linux getopt 函數詳解:命令行參數解析標準實踐

getopt 是 POSIX 標準的命令行選項解析器,支援短選項(-x)、帶參選項(-t 100)、選項合併(-nt 100)。

函數原型與全局變量

#include <unistd.h>
int getopt(int argc, char *const argv[], const char *optstring);
extern char *optarg;    // 當前選項的參數
extern int optind;      // 下一個待解析 argv 索引
extern int opterr;      // 是否打印錯誤信息(默認 1)
extern int optopt;      // 最後一個未識別的選項字符

optstring 規則

  • 字母:對應短選項(如 "nt:" 表示 -n 無參,-t 有參)。
  • 字母後跟 ::該選項**必須**有參數,參數存入 optarg。
  • 字母後跟 ::(GNU 擴展):選項參數**可選**。

標準解析循環

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>

#define ERR_EXIT(m) do { perror(m); exit(EXIT_FAILURE); } while(0)

int main(int argc, char *argv[]) {
    int opt;
    while ((opt = getopt(argc, argv, "nt:")) != -1) {
        switch (opt) {
            case 'n':
                puts("AAAAAAAA");
                break;
            case 't':
                puts("BBBBBBBB");
                int n = atoi(optarg);
                printf("n = %d\n", n);
                break;
            case '?':   // 未識別選項或缺參
            case ':':   // 缺參(opterr=0 時)
                ERR_EXIT("Invalid option");
        }
    }
    // 剩餘非選項參數:argv[optind]...
    return 0;
}

運行示例

$ ./a.out -n
AAAAAAAA
$ ./a.out -t
./a.out: option requires an argument -- 't'
$ ./a.out -t 100
BBBBBBBB
n = 100

進階技巧

  • opterr = 0:關閉默認錯誤輸出,自行處理 '?'/':'。
  • optind 循環後指向第一個非選項參數,可處理命令文件列表。
  • 長選項(--help)需用 getopt_long(GNU 擴展)。

getopt 輕量、可移植,是 C 程序處理命令行的首選工具。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved