Unix 对write()和read()sys调用所用时间的混淆

Unix 对write()和read()sys调用所用时间的混淆,unix,time,system-calls,unix-timestamp,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

下面的代码只是计算写入文件所需的时间

#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;
}
#包括
void main()
{
int-fp;
长a,b;
char*str=“生活就是这样”;
fp=打开(“tmp.txt”,仅限O_WRONLY,0666);
时间(&a);
写入(fp,str);
时间(&b);
/*(b-a)应为书写所需的时间
*文件tmp.txt。
*/
关闭(fp);
返回;
}
我的问题是,如果我们只有一个CPU,那么所花费的时间(b-a)是准确的,还是会受到其他并行运行进程的执行的影响。 这里的一些帖子提到,write()和read()可以像原子系统调用一样处理,就好像它们没有成功一样。设置EINTR只是意味着再试一次。但这是否意味着如果成功,那么在执行过程中,所有其他进程都会被搁置。

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


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

我不关心数据量,而是数据量是否精确或上下文切换可能导致错误的时间。