Computer >> Máy Tính >  >> Lập trình >> C ++

Hàm getopt () trong C để phân tích cú pháp các đối số dòng lệnh

Getopt () là một trong những hàm C tích hợp được sử dụng để thực hiện các tùy chọn dòng lệnh. Cú pháp của hàm này như sau -

getopt(int argc, char *const argv[], const char *optstring)

Chuỗi opstring là một danh sách các ký tự. Mỗi người trong số họ đại diện cho một tùy chọn ký tự duy nhất.

Hàm này trả về nhiều giá trị. Những thứ này giống như bên dưới -

  • Nếu tùy chọn nhận một giá trị thì giá trị đó sẽ được trỏ bởi optarg.
  • Nó sẽ trả về -1, khi không còn tùy chọn để xử lý
  • Trả về dấu ‘?’ để cho thấy rằng đây là một tùy chọn không được công nhận, nó sẽ lưu trữ nó để từ chối.
  • Đôi khi một số tùy chọn cần một số giá trị, Nếu tùy chọn có nhưng các giá trị không có ở đó, thì nó cũng sẽ trả về ‘?’. Chúng tôi có thể sử dụng ‘:’ làm ký tự đầu tiên của chuỗi optstring, vì vậy trong thời gian đó, nó sẽ trả về ‘:’ thay vì ‘?’ Nếu không có giá trị nào được đưa ra.

Ví dụ

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

main(int argc, char *argv[]) {
   int option;
   // put ':' at the starting of the string so compiler can distinguish between '?' and ':'
   while((option = getopt(argc, argv, ":if:lrx")) != -1){ //get option from the getopt() method
      switch(option){
         //For option i, r, l, print that these are options
         case 'i':
         case 'l':
         case 'r':
            printf("Given Option: %c\n", option);
            break;
         case 'f': //here f is used for some file name
            printf("Given File: %s\n", optarg);
            break;
         case ':':
            printf("option needs a value\n");
            break;
         case '?': //used for some unknown options
            printf("unknown option: %c\n", optopt);
            break;
      }
   }
   for(; optind < argc; optind++){ //when some extra arguments are passed
      printf("Given extra arguments: %s\n", argv[optind]);
   }
}

Đầu ra

Given Option: i
Given File: test_file.c
Given Option: l
Given Option: r
Given extra arguments: hello