我有这行代码:
int outputfd = open(charArray[a + 1], O_CREAT| O_WRONLY | O_TRUNC | S_IWUSR, 0640);
如果文件已经存在,我想要打开文件,我想要创建,然后如果不存在则打开。如果我删除O_CREAT,则只打开现有文件。如果我把它留在里面,我只能创建文件,然后打开它们。
我怎么能两个都做?
答案 0 :(得分:5)
当flags参数属于open模式参数时,你在flags参数中有S_IWUSR
。
在Linux(可能还有其他系统,不确定值是多么标准)上,S_IWUSR
与O_EXCL
具有相同的值,因此您从open
获得该行为 - 即如果文件已存在则将失败。从flags参数中删除S_IWUSR
,然后将模式保持原样,或者将其替换为S_IWUSR
,如果这是您想要的模式。
答案 1 :(得分:0)
我猜你的麻烦是打开后存在的文件应该是截断的。也许你可以删除O_TRUNC并重试。