使用MinGW如何创建没有只读文件属性的文件?

时间:2011-04-01 16:12:34

标签: c windows-7 mingw

当我尝试覆盖现有文件时,出现“权限被拒绝”错误。 我注意到创建的文件具有“只读”属性集。当我手动取消设置时,我可以覆盖该文件。是否有一些我可以传递给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;
}

2 个答案:

答案 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权限。 (有关详细信息,请查看手册页。)