我有这行代码:
int outputfd = open(charArray[a + 1], O_CREAT| O_WRONLY | O_TRUNC | S_IWUSR, 0640);
Run Code Online (Sandbox Code Playgroud)
我想要打开文件,如果它已经存在,我想创建然后打开,如果它不存在.如果我删除O_CREAT,则只打开现有文件.如果我把它留在里面,我只能创建文件,然后打开它们.
我怎么能两个都做?
当你S_IWUSR
属于open模式参数时,你已经进入了flags参数.
在Linux上(可能还有其他系统,不确定值是多么标准),S_IWUSR
具有相同的值O_EXCL
,所以你从中得到了这种行为open
- 即如果文件已经存在则会失败.S_IWUSR
从flags参数中删除,并使模式保持原样,或者将其替换为S_IWUSR
if,这是您想要的模式.