使用用户缓冲的I / O进行文件操作

时间:2014-12-15 04:26:23

标签: linux-kernel kernel system io-buffering

我是系统编程的新手,请关注我,如果我的疑问非常模糊。

我读到内置的用户空间缓冲区被使用,因此我们可以通过内核系统调用访问块大小的数据,这需要一个巨大的空间,但在用户空间我们可以进行小的访问大小的数据。我理解这种方法是如何有效的,但我不明白的是,因为这些用户缓冲区与打开文件的每个进程有关。

当两个进程同时访问文件时,进程如何识别对文件所做的微小更改。

这不会产生问题,因为进程将访问旧数据,但不会访问仍在用户空间缓冲区中的某些其他进程更改的数据。

如果有任何错误,请记住我。

1 个答案:

答案 0 :(得分:1)

是的,这种情况发生了。存在进程间竞争条件,并且在缓冲IO时可能会产生奇怪的行为。一般来说,输入没有缓冲那么多(通常一次只有一行)所以它并没有那么糟糕。有很多方法可以通过一个名为mmap的函数来解决它。

在某些情况下,您希望多个进程进行通信,因此我们使用管道/套接字或其他形式的IPC(进程间通信)。

虽然,回答似乎是你的主要问题:不,这并没有真正造成大问题。为什么两个进程在同一个文件上运行,如果它们不是在彼此意识到彼此时呢?它只是不常见,当它出现时,会发生奇怪的事情并且用户本能地一次运行一个程序并且它已经修复。