2012-01-18 80 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