如果使用,echo 1234 >> some-file
则说明文档将附加输出。
我的猜测是,如果某些文件不存在,则O_CREAT将创建一个新文件。如果>
已使用,则O_TRUNC将截断现有文件。
在以下情况下>>
:是否将文件以O_WRONLY(或O_RDWR)打开并试图结束并模拟O_APPEND来完成写入操作?还是将文件以O_APPEND的形式打开,然后将其留在内核中以确保追加?
我之所以这样问是因为,当输出文件来自NFS挂载点时,conserver进程会覆盖通过echo插入的一些标记,并且NFS Documentation说服务器上不支持O_APPEND,因此客户端内核将不得不处理它。我猜服务器进程正在使用O_APPEND,但是不确定>>
Linux上的bash ,因此在这里提出问题。
O_APPEND
不支持NFS上的问题;问题是它是模拟的。在本地文件系统上,写入打开相同文件的多个进程O_APPEND
将永远不会覆盖彼此的数据。在NFS上,O_APPEND
通过在写入之前先查找到结尾来进行仿真,从而保留了竞争条件的可能性。在NFS上无法解决此问题。每个并行编写器都需要编写自己的文件。解决此问题的唯一方法是在NFS服务器上设置服务器进程,使记录器记录到|nc server port
,并使服务器将传入数据附加到日志中。