我希望能夠使用每個引數(-S、-s、-f)并且它們能夠一起使用。-S 列印檔案夾中的檔案及其大小... -s 列印檔案,如果它們 >= 引數提供的檔案大小 -f 查找具有給定子字串的所有檔案。
我如何讓這些一起作業?現在,我的代碼分別完成了所有這些作業。
while((c = getopt(argc, argv, "Ss:f:")) != -1){
switch(c){
case 'S':
// No clue how to make them work together.
printf("Case: S\n");
printf("option -%c with argument '%s'\n", c, argv[optind]);
printDIR(cwd, case_S);
break;
case 's':
printf("Case: s\n");
printf("option -%c with argument '%s'\n", c, optarg);
printDIR(cwd, case_s);
break;
case 'f':
printf("Case: f\n");
printf("option -%c with argument '%s'\n", c, optarg);
printDIR(cwd, case_f);
break;
default:
printf("...");
}
}
printDIR 是一個指標函式,這就是為什么我有 cwd(這是目錄)和 case_S 等等。
我希望能夠說......'./search -S -s 1024 -f tar'。這應該遞回搜索當前目錄并列印檔案的大小,如果它 >= 1024 并且檔案中包含子字串 'tar' 。但我也希望它能夠作業,即使我沒有提供所有引數。
這是我第一次嘗試這樣的事情,所以我是嘗試制作 UNIX 命令和使用 getopt args 的新手。
uj5u.com熱心網友回復:
將我的部分評論轉化為答案。
您應該在不執行任何操作的情況下處理選項。只有當您完成了選項的處理并且沒有錯誤時,您才會考慮執行諸如呼叫printDIR(). 您可能需要更多的函式引數,或使用全域變數。
您將有一個標志,例如:
int recursive = 0;
1如果搜索是遞回的,您將設定為。并int minimum_size = 0;用-s 1024. 而且const char *filter = "";,然后修改與-s tar。等等。通常,這些是全域變數——但如果你可以通過將它們傳遞給函式來避免這種情況,那就更好了。
你的函式可能會變成:
int printDIR(const char *cwd, int recursive, int minimum, const char *filter);
你會用適當設定的區域變數來呼叫它。請注意,您應該在呼叫之前檢查從字串到整數的轉換printDIR()。
如果有非選項引數,您將在選項處理后處理它們:
for (int i = optind; i < argc; i )
printDIR(argv[i], recursive, minimum_size, filter);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/324798.html
上一篇:如何使用fscanf讀取包含多個單詞的文本檔案并通過索引將它們存盤到字串陣列中
下一篇:翻譯單元中具有不同定義的相同結構
