Должен ли я использовать одинарные или двойные угловые скобки для перенаправления на /dev/null?

  • , просто используйте date -d + 10s , чтобы получить 10 секунд вперед. (кстати, вы указываете 10 секунд в вопросе и используете +1 минуту в своем коде)

  • затем используйте banner или printerbanner

     ... 
    banner $ (date -d '+10 секунд' '+% T') # если баннер существует, или 
    printbanner $ (date -d '+10 секунд' '+% T') # ubuntu 
     ... 
     
18
13.04.2017, 15:36
2 ответа

По определению / dev / null поглощает все, что написано в нем , поэтому не имеет значения, если вы пишете в добавлении режим или нет, это все отброшено. Поскольку он не хранит данные, на самом деле не к чему добавлять.

В конце концов, проще написать > / dev / null с одним знаком > .

Что касается отредактированного добавления:

На странице руководства open (2) сказано, что lseek вызывается перед каждой записью в файл в режиме добавления.

Если вы внимательно прочитаете, вы увидите, что там написано (выделено мной):

смещение файла располагается в конце файла, , как если бы с lseek (2)

Это означает, что он (не должен) на самом деле вызывать системный вызов lseek , и эффект также не является строго таким же: вызов lseek (fd, SEEK_END, 0); write (fd, buf, size); без O_APPEND - это не то же самое, что запись в режиме добавления, так как с отдельными вызовами другой процесс может писать в файл между системными вызовами, удаляя добавленные данные. В режиме добавления этого не происходит (кроме NFS, которая не поддерживает реальный режим добавления ).

Текст в стандарте не упоминает lseek в этот момент, только записи должны идти в конец файла.

Итак, усечение / dev / null на самом деле не определено?

Судя по отрывку из Священного Писания, на который вы ссылаетесь, очевидно, что оно определяется реализацией. Это означает, что любая разумная реализация будет делать то же самое, что и с конвейерами и TTY, а именно, ничего. Безумная реализация может сделать что-то еще, и, возможно, усечение может означать что-то разумное в случае какого-либо другого файла устройства.

И влияют ли вызовы lseek на производительность записи?

Протестируйте. Это единственный способ узнать наверняка в данной системе. Или прочитайте источник, чтобы увидеть, где режим добавления меняет поведение, если где-нибудь.

28
27.01.2020, 19:46

Если вы хотите повысить эффективность, вместо этого используйте команду >&-. Это закрывает дескриптор файла, а не перенаправляет его, поэтому не тратится время на запись вещей в него вообще.

-4
27.01.2020, 19:46

Теги

Похожие вопросы