我是 C 編程的新手,我想訪問作為引數傳遞的文本檔案的內容。
當我執行我的程式時:
./cat 10 60 < dog.txt
當我運行 for 回圈來迭代引數時,它不會列印我作為引數傳遞的檔案。
./cat
10
60
所以,我假設它不被視為一個論點。但是,有沒有辦法像我所做的那樣將檔案名作為引數傳遞(./cat 10 60 < dog.txt)然后訪問其內容?
感謝您的幫助,
uj5u.com熱心網友回復:
<是您的shell提供的重定向運算子。
該運算子在其右側打開檔案進行讀取,并且默認情況下,stdin將程式的標準輸入 ( )重新映射為該檔案。
也可以使用以下形式指定要重新映射的檔案描述符:
program [n]< file
其中[n]是一個數字。UNIX檔案描述符和 C 標準庫流之間的典型映射是
0——stdin1——stdout2——stderr
但是可以打開其他檔案描述符,并使用man 2 read.
這是一個示例程式。請注意這兩組不同命令之間的差異:
這個
./a.out a b < file.txt
將列印字串a和b下部分上市程式的引數,然后將列印的內容file.txt。
而這
./a.out a b file.txt
將在列出程式引數的部分下列印字串a、b和file.txt,然后等待您在終端中輸入內容。
#include <stdio.h>
int main(int argc, char **argv) {
size_t line = 0;
char buffer[256];
puts("--- argv ---");
for (int i = 0; i < argc; i )
printf("arg #%d : %s\n", i, argv[i]);
puts("--- stdin ---");
while (fgets(buffer, sizeof buffer, stdin))
printf("%4zu|%s", line, buffer);
}
uj5u.com熱心網友回復:
在 Unix 系統上,每個檔案都有三個標準檔案描述符(映射到檔案的數字)
0 - 標準輸入 1 - 標準輸出 2 - 標準輸入
當您使用重定向符號 (<) 時,bash 會關閉 stdin,它通常從您的鍵盤讀取,并將其重新映射到您正在重定向的檔案,在本例中為 dog.txt。
您沒有將其作為引數傳入是正確的,但是您仍然可以通過使用read命令從檔案 0 中讀取資料來獲取資料
read(0, *buf, buf_size);
E: Barmar 指出你應該使用stdio庫從輸入中讀取,這是更標準的
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/357606.html
標籤:C
下一篇:二叉搜索樹根節點保持NULL
