У меня есть эта строка кода:
int outputfd = open(charArray[a + 1], O_CREAT| O_WRONLY | O_TRUNC | S_IWUSR, 0640);
Я хочу, чтобы файл был открыт, если он уже существует, и я хочу, чтобы его создавали, а затем открывали, если это не так. Если я удалю O_CREAT, откроются только существующие файлы. Если я оставлю его, я могу только создавать файлы, а затем открывать их.
Как я могу сделать то и другое?
У вас есть параметр S_IWUSR
в параметре flags, если он принадлежит параметру открытого режима.
В Linux (и, возможно, в других системах, не уверены, насколько стандартными являются значения), S_IWUSR
имеет то же значение, что и O_EXCL
, поэтому вы открываете это поведение из open
файла - то есть произойдет сбой, если файл уже существует. Удалите S_IWUSR
из параметра flags и либо оставьте режим как есть, либо замените его на S_IWUSR
если этот режим вам нужен.
Я думаю, ваша проблема в том, что существующий файл должен быть усечен после его открытия. Возможно, вы можете удалить O_TRUNC и повторите попытку.