write() 和 read() 系统调用所花费的时间令人困惑

发布于 2024-12-27 19:48:24 字数 509 浏览 2 评论 0原文

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

#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,那么所花费的时间 (ba) 是否准确,或者是否会受到并行运行的其他进程的执行的影响。 这里的一些帖子提到 write() 和 read() 几乎可以像原子系统调用一样对待,就好像它们不成功一样 EINTR 设置只是意味着重试。但这仍然意味着如果它成功,那么在其过程中执行所有其他进程都处于暂停状态。

The below code simply calculates the time taken to write a file.

#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;
}

My question is that if we have a single CPU then whether the time taken (b-a) would be exact or it can be affected by the execution of other process running parallel.
Some posts here mention that write() and read() can be treated almost like atomic syscalls as if they are not successful EINTR is set that simply means to try again.But still does that mean if it is successful then in the course of its execution all other processes are on hold.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

桜花祭 2025-01-03 19:48:24

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

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

Other processes (that are not using I/O or that are using I/O on different devices) can run while your process is waiting for the write to complete, and your process may not immediately get the CPU back after it completes.

In practice, for a small write to a regular file, your write() will probably return immediately after copying your data into a kernel-space buffer, rather than waiting for it to go all the way to the disk.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文