В чем разница между `os.O_APPEND` и` os.ModeAppend`? - PullRequest
0 голосов
/ 07 мая 2018

Мы можем указать как flag и perm в os.OpenFile.

У них действительно похожие параметры: O_APPEND и ModeAppend. В чем разница между ними?

f, _ := os.OpenFile("access.log", os.O_APPEND|os.O_CREATE, os.ModeAppend|0644)

1 Ответ

0 голосов
/ 07 мая 2018

flag указывает флаги, используемые системным вызовом для открытия файла, в то время как perm устанавливает режим файла для файла. Режим файла включает в себя права доступа и тип файла, например. символическая ссылка, каталог и т.д ...

os.O_APPEND сообщает базовой ОС, что все вызовы записи, которые вы делаете для этого обработчика файла, всегда должны добавляться к файлу, поэтому вам не нужно устанавливать смещение для записи в правильной части файла.

ModeAppend устанавливает режим файла для добавления. Это означает, что этот файл может быть изменен только путем добавления к нему, а не путем перезаписи содержимого файла. Специфика этого зависит от используемой ОС и файловой системы. Я считаю, что Plan 9 реализует его, игнорируя смещение при любом вызове записи в файл и всегда добавляя к нему, в то время как в Linux это означает, что файл может быть открыт только для записи в режиме добавления. Я думаю, что на большинстве дистрибутивов Linux вам нужно быть пользователем root, чтобы установить режим файла для добавления.

В 99,99% случаев вы просто хотите использовать perm для установки прав доступа к файлу rwx. В вашем случае, если вы хотите открыть файл и добавить к нему, вы должны использовать:

// os.O_WRONLY tells the computer you are only going to writo to the file, not read
// os.O_CREATE tells the computer to create the file if it doesn't exist
// os.O_APPEND tells the computer to append to the end of the file instead of overwritting or truncating it
f, err := os.OpenFile("access.log", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)

Возможно, вы только проигнорировали ошибку возврата на os.OpenFile, чтобы поместить пример в оперативный режим, но вы должны привыкнуть всегда проверять наличие ошибок. Вы не представляете, сколько пользователей столкнулись с проблемами при запуске с go, потому что они игнорируют ошибки. Иногда это что-то глупое и легко исправить, как опечатка, но если вы игнорируете ошибку, вы не знаете, в чем проблема.

Подробнее о режиме добавления файла вы можете прочитать здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...