grep -n "test" ./*當我們自己寫Linux程式時有沒有比較快的方法能parsing這些參數呢?Linux底下有個好用的function叫getopt(),他可以幫住我們來parsing這些參數。要使用getopt()必須要include unistd.h,以下是一個範例:
#include <stdio.h> #include <unistd.h> int main(int argc, char* argv[]) { char ch; int count; while ((ch = getopt(argc, argv, "d:t")) != EOF) { switch (ch) { case 'd': printf("-d %s\r\n", optarg); break; case 't': printf("-t\r\n"); break; default: fprintf(stderr, "Unknown option: '%s'\n", optarg); return 1; } } //skip the option we read argc -= optind; argv += optind; for (count = 0; count < argc; count++) { puts(argv[count]); } return 0; }
sway@mac$ gcc getopt.c -o getopt sway@mac$ ./getopt -d test -t apple banana -d test -t apple banana這邊要注意的是第8行getopt()的第三個參數"d:t"。d後面的:表示-d之後需要再指定一個參數,而此參數可在optarg中取得。t後面沒有:號表示之後不需要再指定參數。
第27行的puts會把不屬於-d -t的剩下所有參數都印出來,optind其實就是前面while迴圈處理到第幾個參數的index。
沒有留言:
張貼留言