O_CREAT的问题

Jon*_*iou 0 c++ unix file

我有这行代码:

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

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

我怎么能两个都做?

Mat*_*Mat 5

当你S_IWUSR属于open模式参数时,你已经进入了flags参数.

在Linux上(可能还有其他系统,不确定值是多么标准),S_IWUSR具有相同的值O_EXCL,所以你从中得到了这种行为open- 即如果文件已经存在则会失败.S_IWUSR从flags参数中删除,并使模式保持原样,或者将其替换为S_IWUSRif,这是您想要的模式.