使用C語言將ls命令重定向實現

2021-06-05 10:37:06 字數 959 閱讀 3238

#include #include #include #include #include #include #include using namespace std;

int main()

; mkfifo("/root/desktop/namepipe",o_creat|o_excl);

if((pid = fork())<0)

close(fd);

} else if(pid > 0)

return 0;

}

父程序**段(if(pid)>0

) 這是一段輸出重定向的程式,為了解釋方便,首先了解一下linux中標準輸入輸出檔案,linux中基本上所有的元素都可以理解為檔案,包括資料夾,裝置等。程式中,首先使用close(1)關閉標準輸出端子,{/*當然如果你想輸入重定向的話可以關閉標準輸入端子,它的序列是0;序列為3的端子是異常丟擲端子,一般可以讓此端子與輸出裝置保持一致。*/}, 然後使用dup函式將main函式的第一步所建立的名為namepipe.txt的檔案設定為此程式的輸出裝置。接著要關閉該檔案的連線,釋放資源鎖以便讓程式來對此 檔案進行讀寫。最後一步呼叫execlp函式進行命令的執行,這裡執行了乙個ls的命令,讓當前目錄下的所有檔名輸出,execlp函式是可變引數函 數,第乙個引數需要設定系統環境變數中所能獲取的命令檔案,或者自己設定絕對路徑的命令檔案,最後乙個引數必須設定為空,以便標記這個函式的引數已經設定 完成,中間的所有引數設定為第乙個命令的引數,如此段程式其實是執行ls -l這個命令。這樣就將輸出資訊不直接列印到終端而輸出到dd.txt文字檔案中,完成輸出重定向。

回到管道的問題上來。

如果將 剛剛講得重定向技術配合fork()程序產生函式,便可以實現管道的作用了。也就是設定兩個全域性的檔案變數,將子程序 的輸出重定向到其中乙個檔案變數,因為是全域性變數,這個檔案變數就被子程序徹底修改了,然後將父程序的輸入重定向到剛剛子程序的輸出,以此來完成 linux中的管道機制.

重定向 C語言實現重定向

本題是c primer plus 5版 第8章程式設計題第一道題,題目如下 從題述來看,有如下幾個關鍵點 有這麼乙個文字檔案 讀入檔案中的文字 統計檔案中字元數 判斷檔案的結尾 以上4點都做到了,此題解完。那麼,這4步的每一步該如何解決呢?1.有這麼乙個文字檔案 這個好解決,事先建立好乙個文字檔案,...

C語言 檔案重定向

重定向的定義 將輸入輸出標準流定向使用者規定的檔案並讀取或寫入,減少了使用者不斷重新輸入資料的 冗餘。由於變數在未賦值之前的值是不確定的 初值不一定為0 這時我們可以用檔案把輸入資料儲存在檔案中,輸出資料也儲存在檔案中,而使用檔案最簡單的方法便是使用輸入輸出重定向,只需在main函式的入口處加入以下...

c語言輸出重定向 Z

可以使用重定向操作符將命令輸入和輸出資料流從預設位置重定向到不同的位置。輸入或輸出資料流的位置即為控制代碼。下表將列出可用的控制代碼。控制代碼 控制代碼的數字代號 描述 stdin 0 鍵盤輸入 stdout 1 輸出到命令提示符視窗 stderr 2 錯誤輸出到命令提示符視窗 undefined ...