Большинство ответов здесь [ 1 ] [ 2 ] [ 3 ] используют одну угловую скобку для перенаправления в / dev / null, например так:
command > /dev/null
Но добавление в / dev / null тоже работает:
command >> /dev/null
За исключением лишнего символа, есть ли причина не делать этого? Является ли какой-либо из них "более приятным" для базовой реализации / dev / null?
Edit: открыто (2) страница руководство говорит lseek вызывается перед каждой записью в файл в режиме добавления:
O_APPEND
Файл открывается в режиме добавления. Перед каждой записью (2) смещение файла помещается в конец файла, как будто с lseek (2). Модификация смещения файла и операция записи выполняются как один атомарный шаг.
что заставляет меня думать, что может быть крошечное снижение производительности за использование >>
. Но с другой стороны, усечение / dev / null выглядит как неопределенная операция в соответствии с этим документом:
O_TRUNC
Если файл уже существует и является обычным файлом, и режим доступа позволяет записывать (т. Е. O_RDWR или O_WRONLY), он будет усечен до длины 0. Если файл является файлом FIFO или терминальным устройством, флаг O_TRUNC игнорируется. В противном случае эффект O_TRUNC не определен.
и спецификация POSIX говорит >
, что должна обрезать существующий файл , но O_TRUNC определяется реализацией для файлов устройств, и нет ни слова о том, как / dev / null должен реагировать на усечение .
Итак, действительно ли усечение / dev / null не определено? И влияют ли вызовы lseek на производительность записи?
источник