Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ O_CREAT的问题_C++_File_Unix - Fatal编程技术网

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并重试。

为什么要标记它?为什么要标记它??