2015-05-16 38 views
-2

當我嘗試在當前目錄中打開文件時,open函數正常工作,但如果我提到文件的目錄名稱作爲打開函數中的參數,文件未找到錯誤發生。此外,當我嘗試打開另一個目錄中的文件與打開功能,終端打印沒有這樣的文件或目錄。我無法找到寫入文件目錄的問題。c中的open函數在文件名寫入目錄時找不到文件

現在我正在'child1'目錄中工作,我想打開'openthis.c'文件。這是我想要執行的代碼。

#include<fcntl.h> 
#include<stdlib.h> 
#include<sys/stat.h> 
int main(){ 
int fd; 
if((fd = open("/child1/openthis.c", O_RDONLY) < 0){ 
perror("open"); 
exit(1);} 
return 0; 
} 

這並不工作,但如果我寫

open("openthis.c", O_RDONLY) 

,而不是

open("/child1/openthis.c", O_RDONLY) 

的代碼工作正常。爲什麼你覺得我每次寫文件的目錄時都找不到文件?

+0

是什麼'的ls -l/child1/openthis.c'說? – Mat

+1

你確定你的文件夾在你的機器的根目錄嗎? – rpadovani

+0

@Mat它說沒有這樣的文件或目錄,但是當我用'ls -l openthis.c'來完成時,它可以工作。 – user3655508

回答

0

這是因爲你的工作目錄沒有名爲child1的目錄。

open("/child1/openthis.c", O_RDONLY)open("child1/openthis.c", O_RDONLY),和它的工作原理是這樣的:

如果你的工作目錄是child1,它會爲child1文件夾搜索工作目錄內。如果找到,它將在child1/child1內搜索openthis.c,然後將其打開。

open("child1/openthis.c", O_RDONLY)搜索"child1/child1/openthis.c" open("openthis.c", O_RDONLY)搜索"child1/openthis.c"

假設child1是你的工作目錄和openthis.c是裏面唯一的文件,沒有其他的文件夾/文件。 child1/child1/openthis.c永遠不會存在,除非您在工作目錄(它是child1)內創建一個名爲child1的新文件夾,並在其中添加openthis.c

您永遠不能訪問不存在的文件。因爲openthis.c位於你的工作目錄中

child1 
    L child1 
     L openthis.c 

open("openthis.c", O_RDONLY)作品:

open("child1/openthis.c", O_RDONLY)將正常工作,如果你的目錄樹是這個樣子。

您的目錄可能是這樣的:

child1 
    L openthis.c