该函数将unsigned int数组保存在文件中。我希望它覆盖现有文件或创建它。如果文件不存在,则会正确填充。如果它已经存在,它仍然保持原样:但我希望它被覆盖。这就是我使用' 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
一样,我显然不会这样做。
必须是一个愚蠢的事情。
谢谢。
答案 0 :(得分:1)
S_IRUSR
表示为用户读取(因此没有写入权限)。
第一次运行程序创建具有权限-r--------
的文件
第二次运行失败,EPERM(权限被拒绝)。
您应该指定写访问权限:
open(filename, O_WRONLY | O_CREAT, S_IWUSR)
或使用默认的umask:
open(filename, O_WRONLY | O_CREAT)