2011-04-01 103 views
1

当我尝试覆盖现有文件时,出现“权限被拒绝”错误。 我注意到创建的文件具有“只读”属性集。当我手动取消设置时,我可以覆盖文件。是否有一些我可以传递给open()的标志,当我创建一个文件时它会自动取消设置?使用MinGW如何创建没有只读文件属性的文件?

下面是一个简单的例子,说明了这个问题。第一次运行,但第二次产生“权限被拒绝”错误。

感谢, 扎克(新来的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; 
} 

回答

2

我试过0644和S_IRUSR | S_IWUSR(包含sys/stat.h)并且可以工作。

确保你确实将其添加为开放的第三个参数,而不是为新学期到周围的括号(如发生对我来说第一个,编译就好了)

+0

我很确定我已经尝试过这个(作为第三个参数),但是我想我一定是用旧版本的可执行文件进行了测试。它现在似乎在工作。 -谢谢 – Zach 2011-04-01 18:22:22

1

open有三个参数的变异:

int open(const char *pathname, int flags, mode_t mode); 

这第三个参数允许你指定在Unix模式位类型的系统,但应该足以在Windows上设置最小的读/写权限。 (请查看手册页以了解详细信息。)

+0

谢谢你的提示。我添加了S_IRUSR | S_IWUSR,但没有骰子。 – Zach 2011-04-01 16:27:41

+0

humm ...对不起。我敢肯定,没有win32电话有办法,但我现在不记得了。 – Mat 2011-04-01 16:30:11

+0

不是问题。作为一个kludge我可以system(“rm文件名”)。但是,了解一个更合适的方法来处理这个问题会很好。我的代码在unix中工作正常,但试图让事情发生在windows上有点像学习曲线。 – Zach 2011-04-01 16:32:34