APUE筆記 一 IO效率

2021-05-27 15:35:24 字數 2066 閱讀 2185

2011 -8-24 補充:

1、這裡的緩衝不緩衝是針對使用者程序而言,磁碟io肯定會經過核心的高速緩衝,而標準io呢也使用了快取(類似我們程式中的buffer),如果在標準io中直接呼叫系統呼叫的fsync呢,也不能把緩衝刷到磁碟或者輸出中,因為buffer在標準io的快取中,這時候還需要標準io的fflush將快取刷到核心的快取,然後再fsync才會有作用

2、我這裡的例子也是有些問題,用了同樣的檔案,會不會直接就放到了系統快取中下一次就不需要讀取了(3.9後面也有提醒這個,沒有注意)。然後再實驗不同文字發現差不多

***************=分割線

這兩天又看apue,看了前三章,裡面的io、系統呼叫剛好不太明白。就調研了一番

**如下:

#include "unistd.h"

//unistd 不帶緩衝的io函式,需要自己設立緩衝區,呼叫系統庫

#include "stdio.h"

#define maxsize 16384 //20480 //10240 //32768 // 81920 //1//16384 //4096

/* * read write的返回值與引數。

* read 引數為最大空間,返回已經讀取的位元組數

* write 引數為想要寫的位元組數,返回實際寫的位元組書

*/int main(int argc,char * argv)

shaw@***x $ time ./ne_io < ~/ebook/apue2.pdf > ~/ebook/apue3.pdf

緩衝區大小  1

real        0m35.791s

user0m1.344s

sys        0m34.162s

緩衝區大小 81,920

real        0m0.040s

user0m0.000s

sys        0m0.040s

緩衝區大小 32,768

real  0m0.039s

user0m0.000s

sys        0m0.036s

緩衝區大小 20,480

real        0m0.037s

user0m0.000s

sys        0m0.036s

緩衝區大小 16384

real        0m0.033s

user0m0.000s

sys        0m0.032s

緩衝區大小 10240

real        0m0.043s

user0m0.000s

sys        0m0.040s

緩衝區大小 4096

real        0m0.042s

user0m0.000s

sys        0m0.044s

user + sys = total process  time

real =  prepare + block + process

所以大體通過sys 時間就能看出效率來,我的pc大約16384附近效率還算比較高

這裡沒用用到標準io,牽扯到第一章裡看的系統呼叫與c函式庫的概念,順帶談一談自己的體會

unistd.h中展開read函式的模型

int read(int fd, char *buf, int n)

過程:當應用程式經過庫函式向核心發出乙個中斷呼叫int 0x80時,就開始執行乙個系統呼叫。其中暫存器eax中存放著系統呼叫號,而攜帶的引數可依次存放在暫存器ebx、ecx和edx中,只能傳遞3個引數。

這裡只是說的一點點的從應用程式的角度來看如何呼叫系統呼叫,對於系統核心層次的一些服務例程上的事情,等以後懂了再繼續補充吧。

遺留問題:

1、緩衝的io是對上文中不帶緩衝的io的優化,具體怎麼實現後面馬上就知道了,以後對於io效率要求比較高的地方是使用不帶緩衝io適配自己的機器呢,還是說緩衝io就能用。這個應該很快就能清楚

2、核心裡系統呼叫的流程,以及怎麼開放一些系統呼叫例程給應用使用。這個慢慢來把

參考:

APUE學習筆記 檔案IO

1 lseek的返回值應該判斷是否為0,而不是小於0。2 偏移量可以大於檔案大小。這個時候會有檔案空洞。4 open加上標誌 o create和o excl可以判斷檔案是否存在。5 dup和dup2可複製檔案描述符。並可指定複製後的描述符。6 linux ext2檔案系統不支援o sync標誌。可以...

APUE 學習筆記 檔案I O

本章節主要講了 linux 系統下的關於檔案i o操作的幾個函式 open read write lseek close 的使用和需要注意的一些細節。接著,又介紹了多程序見如何共享檔案。下面開始知識點梳理。對於核心來說,所有開啟的檔案,都是通過檔案描述符來引用。當開啟或建立乙個新的檔案的時候,核心都...

《APUE》筆記(1) 檔案I O

1 概述 1 unix類作業系統最重要的兩個東東 程序和檔案 2 大多數檔案i o用到的5個函式 open,close,read,write,lseek.還有檔案屬性操作函式 dup,fcntl 3 unix類作業系統的檔案i o是不帶快取的i o unbuffered i o 2 檔案描述符 fi...