C++ O_CREAT的问题
我有一行代码:C++ O_CREAT的问题,c++,file,unix,C++,File,Unix,我有一行代码: int outputfd = open(charArray[a + 1], O_CREAT| O_WRONLY | O_TRUNC | S_IWUSR, 0640); 如果文件已经存在,我希望将其打开;如果不存在,我希望创建并打开该文件。如果我删除O_CREAT,则只会打开现有文件。如果我把它留在里面,我只能创建文件然后打开它们 我怎样才能做到这两个呢?当flags参数属于open mode参数时,flags参数中有S_IWUSR 在Linux上(可能还有其他系统,不确定这些值
int outputfd = open(charArray[a + 1], O_CREAT| O_WRONLY | O_TRUNC | S_IWUSR, 0640);
如果文件已经存在,我希望将其打开;如果不存在,我希望创建并打开该文件。如果我删除O_CREAT,则只会打开现有文件。如果我把它留在里面,我只能创建文件然后打开它们
我怎样才能做到这两个呢?当flags参数属于open mode参数时,flags参数中有
S_IWUSR
在Linux上(可能还有其他系统,不确定这些值的标准程度),
S_IWUSR
与O_EXCL
具有相同的值,因此您可以从open
中获得该行为,即,如果文件已经存在,则该行为将失败。从flags参数中删除S_-IWUSR
,保持模式不变,或者如果需要,用S_-IWUSR
替换模式。如果属于打开模式参数,则flags参数中有S_-IWUSR
在Linux上(可能还有其他系统,不确定这些值的标准程度),
S_IWUSR
与O_EXCL
具有相同的值,因此您可以从open
中获得该行为,即,如果文件已经存在,则该行为将失败。从flags参数中删除S_IWUSR
,保持模式不变,或者用S_IWUSR
替换,如果这是您想要的模式。我想您的问题是exist文件打开后应该被截断。也许您可以删除O_TRUNC,然后再试一次。我想您的问题是exist文件打开后应该被截断。也许您可以删除O_TRUNC并重试。为什么要标记它?为什么要标记它??