Проблемы с O_CREAT

0

У меня есть эта строка кода:

int outputfd = open(charArray[a + 1], O_CREAT| O_WRONLY | O_TRUNC | S_IWUSR, 0640);

Я хочу, чтобы файл был открыт, если он уже существует, и я хочу, чтобы его создавали, а затем открывали, если это не так. Если я удалю O_CREAT, откроются только существующие файлы. Если я оставлю его, я могу только создавать файлы, а затем открывать их.

Как я могу сделать то и другое?

  • 0
    Почему это помечено c ++ ??
Теги:
file

2 ответа

5

У вас есть параметр S_IWUSR в параметре flags, если он принадлежит параметру открытого режима.

В Linux (и, возможно, в других системах, не уверены, насколько стандартными являются значения), S_IWUSR имеет то же значение, что и O_EXCL, поэтому вы открываете это поведение из open файла - то есть произойдет сбой, если файл уже существует. Удалите S_IWUSR из параметра flags и либо оставьте режим как есть, либо замените его на S_IWUSR если этот режим вам нужен.

0

Я думаю, ваша проблема в том, что существующий файл должен быть усечен после его открытия. Возможно, вы можете удалить O_TRUNC и повторите попытку.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню