小编Mor*_*gan的帖子

我应该使用单尖括号还是双尖括号重定向到 /dev/null?

这里的大多数答案[ 1 ] [ 2 ] [ 3 ]使用单个尖括号重定向到 /dev/null,如下所示:

command > /dev/null
Run Code Online (Sandbox Code Playgroud)

但附加到 /dev/null 也有效:

command >> /dev/null
Run Code Online (Sandbox Code Playgroud)

除了额外的字符,有什么理由不这样做吗?这些中的任何一个对 /dev/null 的底层实现“更好”吗?

编辑:
开放式(2)手册页lseek的是每次写在附加模式文件之前名为:

O_APPEND
文件以追加模式打开。在每次 write(2) 之前,文件偏移量位于文件末尾,就像使用 lseek(2) 一样。文件偏移的修改和写入操作作为单个原子步骤执行。

这让我认为使用>>. 但另一方面,根据该文档,截断 /dev/null 似乎是一个未定义的操作:

O_TRUNC
如果文件已经存在并且是一个常规文件并且访问模式允许写入(即,是 O_RDWR 或 O_WRONLY),它将被截断为长度 0。如果文件是 FIFO 或终端设备文件,则忽略 O_TRUNC 标志。否则,未指定 O_TRUNC 的效果。

并且 POSIX 规范说>应该 truncate an existing file,但是O_TRUNC 是为设备文件实现定义的,并且没有关于 /dev/null 应该如何响应被截断的消息

那么,截断 /dev/null 实际上是未指定的吗?并做lseek的来电对写性能产生任何影响?

io-redirection devices

18
推荐指数
1
解决办法
2096
查看次数

标签 统计

devices ×1

io-redirection ×1