【Linux】基礎IO(下)!!!
在C庫裡面的IO函式在底層也是通過呼叫系統的IO函式來實現的。因為在系統IO函式裡面是通過fd(檔案描述符)實現的,所以在C庫裡面是將fd(檔案描述符)進行了封裝。
在C庫函式向顯示器輸出的時候是行緩衝,但是在向檔案輸出的時候是全緩衝,因為在系統提供的函式裡面是沒有自帶緩衝區的,所以在C庫函式封裝的時候提供的。
int main()
{
char * buf = "haha\n";
fwrite(buf,strlen(buf),1,stdout);
fork();
return 0;
}
結果是:
再將上面的結果重定向之後./a.out > hehe.txt
結果是:
注:在這裡當輸出是輸出到螢幕的時候是行緩衝,但是在重定向之後就將行緩衝變成了全緩衝,所以當執行fork之前不一定會將輸出資料輸出,有可能在fork之後,而在fork之後含有一個子程式,子程式包含的緩衝資料和父程式一樣,所以在這裡面就會在檔案裡面輸出兩個相同的資料。
檔案系統:
超級快:存放檔案系統的資訊
i結點表:存放檔案的基本資訊
資料區:存放資料內容
inode
結構:
在linux裡面每個問價 都對應這一個inode
號,在系統區別檔案的時候也是依靠inode
號來實現區分的,在這個inode
裡面儲存這檔案系統的基本資訊,除開檔名。
顯示inode
資訊:stat filename
顯示inode
號和檔名:ls -i filename
顯示inode
總數和已使用inode數:df -i
在系統裡面開啟一個檔案是通過一個叫目錄檔案來尋找的,這個目錄檔案的裡面含有所有檔案的inode
和檔名,在需要訪問檔案資訊的時候就會進入inode
裡面將檔案的資訊輸出。
如圖:
硬連結:
使用in filename1 filename2
可以將filename1
和filename2
硬連結起來。
在底層可以發現,實現硬連結的兩個檔案的inode
號會一樣的,那麼就可以得出結論,在實現硬連結的時候其實是將兩個檔案公用一個inode
號。
軟連線:
軟連線ln -s filename1 filename2
是建立一個新的檔案,訪問這個檔案的時候就會通過連線去訪問原始檔案。
相關文章
- 【Linux】基礎IO(上)!!!Linux
- 基礎 IO (Linux學習筆記)Linux筆記
- [Java基礎]IOJava
- File與IO基礎
- 基礎IO相關操作
- Linux——基礎命令用法(下)Linux
- 【IO】Linux下的五種IO模型Linux模型
- Linux下停止SendMail程式[Linux基礎]LinuxAI
- Linux下Nginx基礎應用LinuxNginx
- Linux下MySQL之基礎篇LinuxMySql
- 檔案IO中基礎操作
- IO基礎知識與概念
- Linux shell基礎知識_8(下)Linux
- Java之IO流基礎流物件Java物件
- Linux基礎命令---wget下載工具Linuxwget
- Linux下MySQL基礎及操作語法LinuxMySql
- Django專案在Linux下基礎配置DjangoLinux
- Linux下串列埠程式設計基礎Linux串列埠程式設計
- java基礎學習_io流之FileInputStreamJava
- JAVA_基礎IO流物件流(三)Java物件
- Java IO的基礎操作書目錄Java
- Socket.IO打造基礎聊天室
- Linux下開發-IO複用Linux
- Linux 下的五種 IO 模型Linux模型
- Linux 基礎教程 38-檔案下載Linux
- linux下bluetooth程式設計(一)基礎概念Linux程式設計
- Python基礎之:Python中的IOPython
- Java基礎 Java-IO流 深入淺出Java
- Java IO學習筆記四:Socket基礎Java筆記
- Redis基礎篇(二)高效能IO模型Redis模型
- Java基礎之IO轉換流學習Java
- [Java SE] 基礎工具庫 : Apache Commons IOJavaApache
- linux基礎Linux
- 柳大的Linux遊記·基礎篇(5)select IO複用機制Linux
- Linux下Shell基礎知識深入淺出(轉)Linux
- Linux基礎學習——檔案基礎Linux
- java基礎(四):談談java中的IO流Java
- Java基礎知識回顧之六 —– IO流Java