2011-04-01 98 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