【发布时间】:2016-07-02 17:23:46
【问题描述】:
该函数将一个无符号整数数组保存在一个文件中。我希望它覆盖现有文件或创建它。如果文件不存在,则正确填写。如果它已经存在,它会保持原样:但我希望它被覆盖。这就是我使用“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;
}
(我写在最后一个return 1和return 0之间)。
如果我执行以下操作:
if ((FD = open(filename, O_WRONLY | O_CREAT, S_IRUSR)) == -1) {
printf("error\n");
return 1;
}
如果文件存在则打印错误,如果文件不存在则不打印错误。
我尝试将S_IRUSR 更改为其他可能的值,因为我认为该进程可能对文件无权或其他什么,但它并没有改变任何东西。
这就像我使用O_EXCL 一样,我显然没有。
一定是一件愚蠢的事情。
谢谢。
【问题讨论】:
-
errno在open失败后有什么内容? -
@lurker " EEXIST 路径名已经存在,并且使用了 O_CREAT 和 O_EXCL。"我不使用 O_EXCL。
-
@melpomene 现在要去检查,总是忘记这样做。
-
@melpomene ENAMETOOLONG... 之前在我的程序中做了一些愚蠢的事情。谢谢你,该死的我-.-
-
@melpomene 嘿,有没有办法可以关闭这个话题并验证你的评论?
标签: c system-calls