系統IO與標準IO

2021-10-01 04:06:08 字數 1398 閱讀 8070

第十章的學習中,我們學習了open,close,read,lseek,statu函式以及理解了共享檔案的定義,下面通過對一些例子的分析來進一步了解第十章學習的內容。

例1:(ffiles1.c)

int main(int argc, char *ar**)

該例的執行結果為:

分析:在該例中,首先開啟了同乙個檔案3次,然後執行 dup2(fd2, fd3)指令後,對fd3的操作實際是對fd2的操作,每次開啟檔案時,游標都位於檔案的頭部,因此,當fd1對txt檔案讀乙個字母操作時,相當於直接讀出該檔案的第乙個字母即』a』,同理fd2讀出的字母也為』a』,當對fd3進行操作時,實際上是對fd2進行操作,此時游標處於』a』位置,即他讀取的是』a』的下乙個字母,因此讀取字母為』b』。

例2:(ffiles2.c)

int main(int argc, char *ar**)

else

return 0;}

執行結果:

分析:剛開始首先是獲取該程序的id號,然後將與ox01進行與運算(主要是看該pid的最後一位是0還是1,若為0,則s=0,子程序將進入睡眠狀態;若為1,則s=1,父程序將進入睡眠狀態),由執行結果可知:子程序進入了睡眠狀態,一開始讀取了abcde.txt檔案中的第乙個字母』a』,然後通過呼叫fork函式建立子程序,這是子程序擁有與父程序一樣的屬性,即他也讀取了字母』a』,然後子程序進入了睡眠狀態,父程序繼續讀取檔案的下乙個字母,即』b』,因此父程序輸出的是c1=a,c2=b,當子程序休眠超過了休眠的時間後,它也要讀取下乙個字母,此時開啟的仍是同乙個檔案,游標位於字母』b』後,此時子程序繼續讀取乙個字母,即』b』的下乙個字母』c』。

例3:(ffiles3.c)

int main(int argc, char *ar**)

執行結果:

分析:該例中使用了write函式,其中fd1的操作為建立了乙個新的檔案,並將以有的內容覆蓋4個位元組,而fd3的操作是在檔案的結尾加入部分位元組,且fd1,fd2,fd3都是對同一檔案的操作,此時fd1已向檔案中寫入』pqrs』,然後fd3在同一檔案的結尾寫入』jklmn』,然後執行了 fd2 = dup(fd1)指令,此時對fd2的操作實際與對fd1的操作相同,fd2同樣可以對檔案進行4個位元組的覆蓋,fd2先對

『jklm』進行覆蓋,然後在』n』前加上』wxyz』四個位元組,此時檔案中的內容為』pqrswxyzn』,然後fd3又在檔案的結尾加上』ef』兩個位元組,因此檔案中最後的內容為』pqrswxyznef』。

以上是我通過對一些例子的執行結果及分析,如果有不正確的地方,還希望各位大佬批評指正。

標準IO與系統IO比較

分別使用標準io與系統io隨機寫入1000000個整數到檔案,比較哪種更快,為什麼?include include intmain fclose fwp real 0m0.113s 標準io user 0m0.100s sys 0m0.008s include include include inc...

檔案系統之標準IO與系統呼叫IO

io操作是我們程式執行的基礎,資料在程式執行結束時需要儲存就必須使用io操作。io主要包括兩類 標準io與系統io 一 標準io 標準io是為了避免跨平台移植引起的不必要異常,指定的一系列標準函式,無論linux windows都可以使用。標準io常用api包括 fopen fwrite fread...

I O 標準 I O 實驗

一 測試標準 i o 一次可以同時開啟多少個檔案 1 實驗思路 利用迴圈同時開啟檔案,直到不能開啟 2 如下 二 fgetc 和 fputc 實現拷貝檔案並輸出檔案行數 1 實驗思路 開啟檔案,用 fgetc 讀取,然後 fputc 輸出 2 如下 三 fgetc 和 putchar 實現只輸出字母...