O_CREAT的问题

时间:2014-02-08 09:54:42

标签: c++ file unix

我有这行代码:

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

如果文件已经存在,我想要打开文件,我想要创建,然后如果不存在则打开。如果我删除O_CREAT,则只打开现有文件。如果我把它留在里面,我只能创建文件,然后打开它们。

我怎么能两个都做?

2 个答案:

答案 0 :(得分:5)

当flags参数属于open模式参数时,你在flags参数中有S_IWUSR

在Linux(可能还有其他系统,不确定值是多么标准)上,S_IWUSRO_EXCL具有相同的值,因此您从open获得该行为 - 即如果文件已存在则将失败。从flags参数中删除S_IWUSR,然后将模式保持原样,或者将其替换为S_IWUSR,如果这是您想要的模式。

答案 1 :(得分:0)

我猜你的麻烦是打开后存在的文件应该是截断的。也许你可以删除O_TRUNC并重试。