C: В доступе отказано с помощью open () (GCC для Windows) - PullRequest
3 голосов
/ 18 сентября 2011

Итак, я просто пишу:

int fdes = open(path, O_WRONLY | O_CREAT | O_TRUNC);

И если файл, на который ссылается path, не существует, этот код работает.Но если это произойдет, код возвращается с errno 13: разрешение запрещено.Я никогда не использую режим O_EXCL.

Я долго искал решение этой проблемы, и я действительно растерялся.Можете ли вы объяснить проблему?

Я использую GCC для Windows (4.5.2) .Ваш ответ будет оценен.

1 Ответ

5 голосов
/ 18 сентября 2011
  1. Если вы используете O_CREAT, вы должны указать режим в качестве третьего аргумента для open().
  2. Если файл существует, у вас должно быть разрешение на запись в файл.Ошибка указывает (настоятельно рекомендует), что файл создается без разрешения на запись.Это может быть следствием того, что он не создается в разумном режиме.

Обратите внимание, что (по крайней мере в Unix) вы можете создать файл для записи в режиме 0444 (или даже 0);права доступа влияют на всех остальных, но не на процесс, который создал файл, пока он использует дескриптор файла, который создал файл.

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