当我尝试覆盖现有文件时,出现“权限被拒绝”错误。 我注意到创建的文件具有“只读”属性集。当我手动取消设置时,我可以覆盖该文件。是否有一些我可以传递给open()的标志,当我创建文件时会自动取消设置?
下面是一个简单的例子,说明了这个问题。第一次运行,但第二次运行产生“权限被拒绝”错误。
谢谢, Zach(MingW / Windows 7新手)
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#include <errno.h>
int main(int argc, char ** argv) {
int fid;
double data = 12.0;
if ( (fid = open("junk.data", O_WRONLY | O_CREAT | O_BINARY)) == -1 ) {
printf("ERROR opening.\n\terror is:%s\n", strerror(errno));
return 1;
}
write(fid, &data, sizeof(double));
close(fid);
return 0;
}
答案 0 :(得分:2)
我尝试了0644和S_IRUSR | S_IWUSR(包含sys / stat.h)并且可以正常工作。
确保你实际上将它添加为open的第三个参数,而不是作为新术语添加到周围的括号中(就像我先发生的那样,编译得很好)
答案 1 :(得分:1)
open
有三个参数变体:
int open(const char *pathname, int flags, mode_t mode);
第三个参数允许您在Unix类型系统上指定模式位,但应该足以在Windows上设置最小的r / w权限。 (有关详细信息,请查看手册页。)