簡體   English   中英

如何將輸出重定向到 C 中的文件?

[英]How to redirect output to a file in C?

我正在嘗試在 C 中:

  1. 從文件中讀取數據
  2. 操作數據
  3. 將操作過的數據寫入另一個文件

在分配要求中,它說使用以下命令編譯和運行程序:

gcc -o name name.c 
./name inputFileName.ext > outputFileName.ext

我不熟悉“ > ”命令。 我有一些問題:

  1. 在網上,它說“>”將命令輸出重定向到一個文件,我不確定“命令輸出”到底是什么意思。 我正在將 name.c 文件的輸出重定向到 outputFileName.ext 文件。 命令輸出是否意味着標准輸出? 如果是這樣,我將使用哪個 C 關鍵字將信息從 name.c 作為 stdout 寫入 outputFileName.ext 文件?
  2. 當我打開並讀取我的輸入文件時,我需要訪問從命令行傳入的文件。 “ > ” 字符算作另一個命令行參數嗎? 我仍然可以使用語句“argv[1]”從 main() 訪問 inputFileName.ext 嗎?

在網上,它說>將命令輸出重定向到一個文件,我不確定“命令輸出”到底是什么意思。

“命令輸出”指的是程序的stdout (標准輸出)流。

請注意,某些 shell 命令不是單獨的程序,但實際上是shell 內置命令,盡管它們仍將支持輸出重定向。 在 Windows 上,大多數 shell 命令(如dirdel )是內置的,而在 Linux/BSD/etc 上,大多數 shell 命令是單獨的程序(如lsmkdir

如果您的程序調用puts( "foobar" ); 然后從 Bash 運行./name將在您的終端模擬器中顯示“foobar”。 但是如果你運行./name > file.txt那么“foobar”文本將被寫入file.txt並且它不會顯示在你的終端模擬器中。

嘗試使用ls命令,例如: ls -al > files.txt 這也適用於 Windows ( dir /s > files.txt )。

我正在將name.c文件的輸出重定向到outputFileName.ext文件。 命令輸出是否意味着標准輸出?

是的。

如果是這樣,我將使用哪個 C 關鍵字將信息從 name.c 作為 stdout 寫入 outputFileName.ext 文件?

你沒有。 這是一個 shell/OS 功能,不是 C 的一部分。

讓我們澄清一些事情:

  1. ><和其他一些符號(與您的問題無關)是命令行解釋器(又名 shell)的控制運算符。 當 shell 看到其中的任何一個時,它假定程序的命令行參數現在已經完成。 所以在你的情況下,你的程序將有argc=2argv = ["name ", "inputFileName.ext"]
  2. “重定向”意味着無論您的程序通常通過stdout (在調用printf() putchar()時默認使用, puts() )寫入屏幕的任何內容都將寫入>之后的文件名。 你的程序完全不知道這個事實。 在您的代碼中,您應該假設您正在屏幕上打印。 執行命令的人負責執行重定向。 (另外:“outputFileName.ext”不需要存在,如果不存在,它將被創建,但重定向將覆蓋以前在該文件中寫入的任何內容,因此要格外小心,不要意外重定向到 .c 文件或者您之前執行的結果,如果您同時需要它們
  3. < (不是在您的問題中,而是密切相關)與您想象的相反,程序從該文件而不是從鍵盤讀取輸入。 (顯然該文件現在需要存在)

對於問題的第二部分,您可以(並且應該)通過argv[1]的內容訪問輸入文件的名稱。 您將打開文件並通過一些將文件描述符作為參數的 C 函數(如fscanf()fgets()getline() )從中讀取。

最后,你確定給你的命令是

./name inputFileName.ext > outputFileName.ext

並不是

./name < inputFileName.ext > outputFileName.ext

?

后者對輸入和輸出都使用重定向,並且在讀取時不應該做任何不同的事情,只需從stdin正常讀取即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM