2012-07-04 34 views
0

我正在尝试使用不应该被阻止的线程写入不同偏移位置的文件。我不太确定如何继续。我猜测我需要用O_NONBLOCK标志打开文件。非阻塞线程安全文件写入

难道只是我需要打开与O_NONBLOCK标志的文件,写的过程将是相同的?

的代码的任何样品片将是有益的作为解释

由于

+0

你为什么要这样做? – penartur

+0

您需要指定要使用的语言。 – assylias

+0

我正在研究一个需要良好性能的项目,这就是为什么要同时使用多个线程写入文件的原因。这是写在C – sam32

回答

1

在Unix/Linux file descriptors associated with files are always ready for read and write。换句话说,O_NONBLOCK对常规文件没有影响。

通常情况下,写入文件只是将数据复制到内核页面缓存和回报。除非用O_DIRECT标志打开文件,否则内核页面缓存中有太多脏页面,在这种情况下,写入变为阻塞状态。

如果你需要做的无阻塞写入一个文件或者创建一个专门的线程做所有文字,或使用asynchronous I/O

+0

我明白你的观点,但不清楚如何实施它。我尝试做一些事情,但它不起作用,我觉得我的代码中缺少某些东西。 请给我一个示例代码或发布一些可用的标准API,以便我能够执行异步I/O,而不会对数据的完整性造成任何损害。 感谢您的帮助! – sam32

+0

IMO最简单的就是以[aio_write]开头(http://pubs.opengroup.org/onlinepubs/007904975/functions/aio_write.html)。 –