2014-02-16 50 views
-2

只是一個關於C命令行內容的簡單問題。帶有'<'和' - 選項'的命令行C

下面是什麼意思?我明白了--a是可執行測試的一個選項。 test-a < test.txt

但'< test.txt'是什麼意思?

此外,如果你們可以幫助我理解一個簡單的程序如何在諸如 '-a,-b,-c'這樣的選項中使用三種不同的選項,那將會有所幫助。關於我的頭頂,似乎這樣做的方法是檢查該參數是否有2個字符,它只是一個' - '後跟一個有效選項的字母,但有沒有特殊的方法可以做到這一點?就像C語言中的某些東西能夠自動識別一個' - ',然後是一個字母,就像是一個選項一樣?

+0

這篇文章可以幫助你http://stackoverflow.com/questions/498320/pass-arguments-into-c-program-from-command-line – user376507

回答

1

在C中,它並不意味着什麼特別的東西,只是命令行中的「<」。

在許多操作系統中,儘管它意味着從文件test.txt重定向標準輸入。即而不是來自終端的stdin,它來自命名文件。

要處理命令行解析,請查看getopt

<編輯>我說這是一個評論,但我認爲它不愧爲答案:

如果輸入app -a -b < xxx,外殼調用應用程序解釋線的< xxx部分和< xxx韓元」 t在傳遞給應用程序的參數數組(argv)中。你沒有(簡單的)方法知道重定向發生了。

+0

這是否意味着它翻出從這個文件中的所有參數?如果我在該文本文件中有「快速棕色狐狸」之類的東西,它將如何被讀取? – user2353398

+0

如果你的程序正在執行'scanf'或類似的東西,它來自文件,而不是你輸入intp終端。文件IO仍然是文件IO - 如果打開要讀取的文件,則重定向不是您想要的。 – John3136

+0

等一下,我很困惑。 有 測試 user2353398

-1

「< test.txt」表示將test.txt的內容作爲參數傳遞。 如果「<」被替換爲「>」,它會將程序的輸出重定向到test.txt。

我不認爲有一種特殊的方法來檢測「 - 」。通過參數迭代並檢查第一個字符是否爲「 - 」

+0

關閉,但不正確。在大多數shell中,'foo

1

我想澄清John3136和enedil迄今爲止所說的內容。我希望你接受其中的一個答案。

shell(例如bash)是負責處理您鍵入的命令並執行相應程序的程序。代碼段< test.txt是一個特殊指令,它指示shell使程序從文件(本例中爲text.txt)讀取其輸入。如enedil指出的那樣,非指令的單詞作爲參數通過變量argv傳遞給C程序。

編輯。有兩種方法可以將文件傳遞給程序。

在運行時提供作爲參數的文件路徑。然後,您可以撥打fopen打開指定文件:

if (argc == 1) { 
    fprintf("No filename provided!"); 
    exit(EXIT_FAILURE); 
} 
FILE* f = fopen(argv[1], "r"); 
/* Do stuff with f here */ 

另一種選擇是隻閱讀你的C程序從stdin您的輸入,並使用< test.txt重定向文件,只要你想用一個文件的內容作爲stdin。這樣,您可以通過允許程序從文件讀取輸入或接收用戶輸入來提供更大的靈活性。

+0

那麼你能否幫助我理解,如果我想讀取test.txt的內容,我會如何去做C? – user2353398

+0

這很大程度上取決於您正在嘗試做什麼,我會將其編輯爲答案。 – MBlanc

+0

好吧,我可以打開test.txt文件,如果它被重定向嗎?我知道如何使用fopen和fscanf,但是我對命令行參數和重定向輸入之間的區別感到困擾,因爲我在編寫一個程序時考慮了文件名以便在其中打開。 – user2353398