2016-11-26 50 views
0

我正在關注中的示例代碼。黑客:開發的藝術並且在運行以下操作時遇到問題。當目錄不存在時,使用`open`打開相關文件

datafile = (char *) ec_malloc(20); 
strcpy(datafile, "/tmp/notes"); 

fd = open(datafile, O_WRONLY|O_CREAT|O_APPEND, S_IRUSR|S_IWUSR); 
if (fd == -1) 
    fatal("in main() while opening file"); 

的錯誤信息是:

[!!] Fatal Error in main() while opening file: No such file or directory

凡在「沒有這樣的文件或目錄」位與自定義fatal()函數創建。

請注意,不存在於程序的位置,但O_CREAT標誌應該說明(或我想的)。我試過將strcpy段切換到".\\tmp\\notes",但結果是一樣的。如何創建目錄中尚不存在的目錄?

我在Windows 10上使用MinGW並正在編譯w/gcc

回答

1

你說不存在「在程序的位置」。這意味着你正在一個目錄FOO中運行程序,並期望它創建一個像FOO/tmp/notes這樣的文件。但是你真正要求的是/ tmp/notes,這是一個絕對路徑。您可能需要不帶前導斜槓的tmp/notes,但這也是一個目錄加上一個文件,並且open()不會創建該目錄。因此,無論是使用notes作爲在當前目錄中打開的文件,還是使用tmp/notes並首先撥打mkdir("tmp")

+0

嗯,打開不會創建目錄,只有文件?改變路徑爲「筆記」完美運作。看來我誤解了O_CREAT標誌。謝謝! – aiokos

相關問題