2012-01-18 73 views
0

下面的代碼簡單地計算了寫入文件所花費的時間。對write()和read()sys調用花費的時間感到困惑

#include<time.h> 
void main() 
{ 
    int fp; 
    long a,b; 
    char *str = "Life is like that only"; 
    fp = open("tmp.txt",O_WRONLY,0666); 
    time(&a); 
    write(fp,str); 
    time(&b); 
/*(b-a) should be the time taken to write 
    * the file tmp.txt. 
    */ 
    close(fp); 
    return; 
} 

我的問題是,如果我們有一個單一的CPU然後是否所花費的時間(B-A)將是精確的或者它可以通過其它過程並行運行的執行的影響。 這裏的一些帖子提到write()和read()幾乎可以像原子系統調用一樣對待,就好像它們不成功一樣,EINTR被設置爲僅僅意味着再試一次。但是如果它成功的話,其執行所有其他進程都處於暫停狀態。

回答

0

當進程正在等待寫入完成時,其他進程(不使用I/O或在不同設備上使用I/O的進程)可以運行,並且進程可能不會立即讓CPU返回完成。

實際上,對於小規模寫入常規文件,write()可能會在將數據複製到內核空間緩衝區後立即返回,而不是等待它一直到磁盤。

+0

數據量並不是我關心的問題,現在是時間,如果它可以是一個確切的或上下文切換可以使它錯誤。 – 2012-01-18 18:09:42