对write()和read()sys调用所花费的时间感到困惑

时间:2012-01-18 17:57:52

标签: unix time system-calls unix-timestamp

以下代码只计算写入文件所需的时间。

#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设置只是意味着再试一次。但是这仍然意味着如果它成功那么在它的过程中执行所有其他进程都处于暂停状态。

1 个答案:

答案 0 :(得分:0)

其他进程(不使用I / O或在不同设备上使用I / O)可以在进程等待写入完成时运行,并且您的进程在完成后可能无法立即恢复CPU

实际上,对于常规文件的小写操作,write()可能会在将数据复制到内核空间缓冲区后立即返回,而不是等待它一直到磁盘。