[英]How to redirect output to a file in C?
我正在嘗試在 C 中:
在分配要求中,它說使用以下命令編譯和運行程序:
gcc -o name name.c
./name inputFileName.ext > outputFileName.ext
我不熟悉“ > ”命令。 我有一些問題:
在網上,它說
>
將命令輸出重定向到一個文件,我不確定“命令輸出”到底是什么意思。
“命令輸出”指的是程序的stdout
(標准輸出)流。
請注意,某些 shell 命令不是單獨的程序,但實際上是shell 內置命令,盡管它們仍將支持輸出重定向。 在 Windows 上,大多數 shell 命令(如dir
和del
)是內置的,而在 Linux/BSD/etc 上,大多數 shell 命令是單獨的程序(如ls
和mkdir
)
如果您的程序調用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 的一部分。
讓我們澄清一些事情:
>
、 <
和其他一些符號(與您的問題無關)是命令行解釋器(又名 shell)的控制運算符。 當 shell 看到其中的任何一個時,它假定程序的命令行參數現在已經完成。 所以在你的情況下,你的程序將有argc=2
和argv = ["name ", "inputFileName.ext"]
。stdout
(在調用printf()
putchar()
時默認使用, puts()
)寫入屏幕的任何內容都將寫入>
之后的文件名。 你的程序完全不知道這個事實。 在您的代碼中,您應該假設您正在屏幕上打印。 執行命令的人負責執行重定向。 (另外:“outputFileName.ext”不需要存在,如果不存在,它將被創建,但重定向將覆蓋以前在該文件中寫入的任何內容,因此要格外小心,不要意外重定向到 .c 文件或者您之前執行的結果,如果您同時需要它們)<
(不是在您的問題中,而是密切相關)與您想象的相反,程序從該文件而不是從鍵盤讀取輸入。 (顯然該文件現在需要存在) 對於問題的第二部分,您可以(並且應該)通過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.