найти режим возврата описателя файла с помощью функции open(const char *filename, int flags[, mode_t mode])

#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, вы получите неопределенное поведение, которое, скорее всего, проявляется как «случайный» режим файла, но вы можете привести к сбою вашего процесса.