Linux 教你三分鐘學會重定向

2021-09-09 00:27:39 字數 1686 閱讀 4831

在學習了檔案描述符及其分配規則(之後,了解到作業系統總是找到當前files_struct的指標陣列中沒有被使用的最小的乙個下標,作為新的檔案描述符。在**的結尾我們發現,檔案可以通過close來關閉,既然可以關閉,那如果我將標準輸出1關閉,再開啟myfile檔案,會出現什麼現象呢?用**驗證一下

在編譯test.c之前我們先看看資料夾裡的檔案,沒有myfile檔案,編譯後並執行a.out,我們發現本該輸出到顯示器上的內容,輸出到了myfile檔案中,而輸出重定向不就是檔案描述符為1的嗎?這種現象就叫做輸出重定向。常見的重定向有》(輸出重定向)、>>(追加重定向)、

我們知道檔案描述符分配規則是在files_struct的指標陣列中,找到當前沒有被使用的最小的乙個下標,就作為新的檔案描述符,printf是c庫當中的io函式,一般往 stdout 中輸出,但是stdout底層訪問檔案的時候,找的還是fd:1, 但此時,fd:1已經分配給了myfile。fd:1下標所表示內容,已經變成了myfile的位址不再是顯示器檔案的位址,所以,輸出的任何訊息都會往檔案中寫入,進而完成輸出重定向。 

除上述例子之外我們還可以使用dup2系統呼叫來完成重定向

函式原型如下:

根據定義,newfd裡的內容是oldfd裡內容的拷貝,這裡的newfd和oldfd是檔案描述符,所以最終會有兩個oldfd。所以如果想把1的內容重定向到fd所指向的檔案,引數應該為 dup2(fd,1)。具體**如下:

所以,dup2系統呼叫將標準輸入中輸入的本該輸出到標準輸出的內容直接列印到檔案內部。

那麼關於重定向,dup2和剛剛的方法有什麼區別呢?

剛剛的方法是先把檔案關了,然後新開啟乙個檔案,實現重定向。而dup2呢,是兩個檔案描述符都已經有了,只是把檔案內容進行了拷貝,進而實現重定向。

三分鐘帶你學會爬蟲

深度學習模型訓練極大的依賴資料,當資料量不夠時,可通過網路爬蟲從網上爬取資料。下面以爬取劉亦菲和劉德華資料為例介紹爬蟲 使用步驟如下 劉亦菲 劉德華import re import requests from urllib import error from bs4 import beautiful...

三分鐘學會如何在函式計算中使用 puppeteer

摘要 使用 puppeteer 結合函式計算,可以快速的構建彈性的服務完成各種功能,包括 生成網頁截圖或者 pdf 高階爬蟲,可以爬取大量非同步渲染內容的網頁 模擬鍵盤輸入 表單自動提交 登入網頁等,實現 ui 自動化測試和捕獲站點的時間線,以便追蹤你的 幫助分析 效能問題 簡介使用 puppete...

沉默三分鐘

網上見此真情之文,藉以自表 原文 http www.hecaitou.net p 3018 沉默三分鐘是心祭。那麼多年了,國旗終於為平民而降。那麼多天了,全民哀悼終於實現。與此同時,火炬停止傳遞,因為這不是乙個歡慶的時刻。很多年後回顧2008年,我 也許寧可它從日曆中消失。還沒有哪一年和今年一樣,才...