#c #compiler-optimization
#c #оптимизация компилятора
Вопрос:
при компиляции программы на C с -O1
флагом или большим, компилятор выдает ошибку call to '__open_missing_mode' declared with attribute error: open with O_CREAT or O_TMPFILE in second argument needs 3 arguments
.
Из поиска в Интернете я обнаружил, что Open должен проходить mode_t
с O_CREAT
опцией. Как найти режим по умолчанию для файлового дескриптора, который возвращается с open
функцией на 2 аргумента ранее.
Комментарии:
1. Что вы имеете в виду режим по умолчанию? Если вы передаете
O_CREAT
, а не третий аргумент с именем файла, который еще не существует, вы попадаете в неопределенное поведение приopen()
попытке использовать этот несуществующий аргумент.2. И если файл уже существует, его разрешения являются любыми, и вы можете найти их с
fstat()
помощью .3. Он отлично компилируется, если я не передаю
-O1
флаг. Итак, что этоmode_t
взято здесь?4. Он отлично компилируется, если я не передаю
-O1
флаг , что не означает, что код правильный. Режима по умолчанию нет. Если вы вызываетеopen()
сO_CREAT
помощью и не передаете третийmode_t
аргумент, как отметил @Shawn, вы получите неопределенное поведение, которое, скорее всего, проявляется как «случайный» режим файла, но вы можете привести к сбою вашего процесса.