Unix高级环境编程 学习小结(一)
這個系列的博客主要是針對Unix高級環境編程的內容做一個小結,針對的是面試中經常問道或者可能問到的問題。
Unix體系結構:
環境的核心是內核,內核的接口被稱為系統調用,公用函數庫建立在系統調用接口只上,應用程序既可使用系統調用,也可以使用公用函數庫。Shell是一個特殊的應用程序,為運行其他程序提供了接口。
Shell有很多種,最常用的是/bin/sh下面的Shell。
輸入輸出:
文件描述符:通常是一個小的非負整數,內核用以標識一個特定進程正在訪問的文件,打開文件或創建文件的時候都會返回文件描述符。
標準輸入、輸出、錯誤:每當一個新程序運行時,Shell都會為其打開三個文件描述符,負責輸入,輸出,和錯誤。這三個描述符都鏈接向終端。可以使用>? <等符號重定向流。
不帶緩沖的IO:函數open,read,write,lseek,close提供了不帶緩沖的IO,稍后會寫細節。
標準IO:常見的是Printf,getc,putc。
文件I/O:
函數open和openat:
用戶打開文件,參數為路徑,和flag
flag參數主要制定打開方式,如只讀,只寫,追加等等非常非常多的操作,具體使用和詳解可以查表。
openat的使用方法一樣,只是openat可以使用相對路徑打開文件,open只能使用絕對路徑。
?
函數lseek:
每個打開的文件都有與其相關的文件偏移量,他通常是一個非負整數,用以度量從文件開始處計算的字節數。同樣,調用該方法時也需要傳遞flag參數,根據不同的情況設置不同的偏移量。
?
Unix文件系統:
?
內核使用三種數據結構表示打開文件,他們之間的關系決定了在文件共享方面的一個進程對另外一個進程可能產生的影響
(1)每個進程在進程表中都有一個記錄項,記錄項中包含一張打開的文件描述符的表,可將其視為一個矢量,每個描述符占用一項,與每個文件描述符相關聯的是:
a.文件描述符標志。
b.指向一個文件表項的指針。
(2)內核為所有打開的文件維持一張文件表,每個文件表項包含:
a.文件狀態標志(讀,寫,追加寫,同步,非阻塞等)
b.當前文件偏移量
c.指向該文件v節點表項的指針
(3)每個打開的文件(設備也算),都有一個v節點結構,v節點包含了文件類型和對此文件進行各種操作函數的指針,對于大多數文件,v節點還包含了該文件的i節點(i-node 索引結點)。這些信息是在打開文件時從磁盤上讀入內存的,所以,文件的所有相關信息都是隨時可用的,例如,i節點包含了文件的所有者,文件長度,指向文件的實際數據塊在磁盤上的所在位置的指針等。
黏著位:
程序第一次被執行后,在終止時,如果設置了該黏著位,會在內存中保存一份副本,下次執行時能更快載入內存。
轉載于:https://www.cnblogs.com/derek-dhw/p/11096224.html
總結
以上是生活随笔為你收集整理的Unix高级环境编程 学习小结(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FGPA异步信号问题
- 下一篇: 【i.MX6UL/i.MX6ULL开发常