C 当文件已经存在时,打开返回(-1)并创建O_
该函数将无符号整数数组保存在文件中。我希望它覆盖或创建现有文件。如果文件不存在,则正确填写。如果它已经存在,它将保持原样:但我希望它被覆盖。这就是我使用“O_CREAT”的原因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)
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原因完全相似,在这种情况下非常有用。