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。
沒有留言:
張貼留言