Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.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 当文件已经存在时,打开返回(-1)并创建O__C_System Calls - Fatal编程技术网

C 当文件已经存在时,打开返回(-1)并创建O_

C 当文件已经存在时,打开返回(-1)并创建O_,c,system-calls,C,System Calls,该函数将无符号整数数组保存在文件中。我希望它覆盖或创建现有文件。如果文件不存在,则正确填写。如果它已经存在,它将保持原样:但我希望它被覆盖。这就是我使用“O_CREAT”的原因 int save_pic(t_bunny_pixelarray *pix, const char *filename, t_tekpaint *tekpaint) { unsigned int *pixels; int FD; int i = 0; if (!filename)

该函数将无符号整数数组保存在文件中。我希望它覆盖或创建现有文件。如果文件不存在,则正确填写。如果它已经存在,它将保持原样:但我希望它被覆盖。这就是我使用“O_CREAT”的原因

int save_pic(t_bunny_pixelarray *pix, const char *filename, t_tekpaint *tekpaint) {
    unsigned int *pixels;
    int FD;
    int i = 0;
    if (!filename)
        return 1;
    if ((FD = open(filename, O_WRONLY | O_CREAT, S_IRUSR)) == -1)
        return 1;
    return 0;
}
(我在最后一个
返回1
返回0
之间写入)

如果我这样做:

if ((FD = open(filename, O_WRONLY | O_CREAT, S_IRUSR)) == -1) {
    printf("error\n");                                                            
    return 1;
}
如果文件存在,则打印错误;如果文件不存在,则不打印错误。 我尝试将
S_IRUSR
更改为其他可能的值,因为我认为该进程可能对文件或其他内容没有权限,但它不会更改任何内容

它的行为就像我在使用
O_EXCL
,而我显然没有这样做。 一定是件蠢事。
谢谢。

S\u IRUSR
表示为用户读取(因此无需写入权限)

第一次运行程序时,将创建具有权限的文件
-r------

第二次运行失败,使用EPERM(权限被拒绝)

您应该指定写访问权限:

open(filename, O_WRONLY | O_CREAT, S_IWUSR)
或者使用默认umask,使用:

open(filename, O_WRONLY | O_CREAT)

errno
打开失败后,
open
中有什么?@lower“EEXIST路径名已经存在,并且使用了O_create和O_EXCL。”我不使用O_EXCL。@melpomene现在要检查,总是忘记这样做。@melpomene ENAMETOOLONG。。。在我的节目里做过一些愚蠢的事。谢谢你,该死的我。-@melpomene嘿,有没有办法结束这个话题,验证你的评论?这是真的,但不是问题所在。仍然+1原因完全相似,在这种情况下非常有用。