2013-04-25 176 views
0

對於下面的代碼片段中,我得到一個錯誤:無法打開文件C

Unable to open file: No such file or directory 

redirect_ptr是char ** 我試圖打印redirect_ptr [0],它打印正確了。任何想法可能存在的問題?

if ((in_fd = open(redirect_ptr[0], O_RDWR | O_CREAT)) == -1) { 
    perror("Unable to open file"); 
    return -1; 
} 
+2

你真的有想打開的文件嗎?.. – piokuc 2013-04-25 19:45:06

+0

是的,它應該創建它 – user44273 2013-04-25 19:45:48

+0

添加一個調試打印的文件名 – bobah 2013-04-25 19:48:41

回答

2

當您創建文件時,open()需要額外的參數,即要創建的文件的權限位。 您需要例如

if ((in_fd = open(redirect_ptr[0], O_RDWR | O_CREAT, 0644) == -1) 

這也許不是你的錯誤的原因,但是如果錯誤是「沒有這樣的文件或目錄」,那麼這正是什麼是錯的,你的程序無法找到該文件。

也許您在文件名中有一些不可打印的字符,或者名稱以空格或換行符或類似名稱結尾,或者拼寫錯了名稱或錯誤的大小寫,或者路徑是相對路徑與基於當前工作目錄的文件不匹配。

在一對''中打印文件名通常很有幫助,所以你可以看看是否有一些不應該存在的空白。添加一個

printf("Filename: '%s'\n",redirect_ptr[0]); 

到您的代碼。如果它看起來不錯,對打印出的文件名做一個ls -l,站在流程的工作目錄中。