2012-09-18 144 views
0

我正在運行下列程序,該程序使用stat()來檢查文件是否存在。但是,當我通過一條路徑說,$HOME/file.sh,它會失敗,並出現ENOENT錯誤。但是,當我經過擴充的路徑即/root/file.shstat()回報成功退出即代碼0狀態返回ENOENT

int main() 
{ 
    struct stat statbuf; 
    char path [1024]; 
    strcpy(path,"$HOME/file.sh"); 

    int rc = stat(path,&statbuf); 

    if (rc == -1) 
    { 
     printf ("File not found !!\n"); 
    } 
    else 
     printf("Found it !!\n"); 

    return 0; 
} 
+1

$ HOME對shell腳本有意義,但對C程序沒有意義。您要求stat在當前工作目錄下的名爲$ HOME的目錄中查找名爲file.sh的文件。 – Scooter

回答

4

strcpy()不會環境變量$HOME擴展到它的價值,但作爲指定將複製提取字符串文字。您可以使用getenv()獲得值$HOME

改變你的失敗消息:

printf("File not found: %s\n", path); 

確認。

+0

是的,但那不是我關心的問題。我可以直接將$ HOME/file.sh傳遞給stat。但我的問題是我需要傳遞一個絕對路徑stat? –

+0

@trax_code,不,你不知道。如果路徑不是絕對的,那麼該路徑將被視爲相對路徑,並且它將相對於進程的當前目錄。 – hmjd

+0

好的。一個問題。通過當前目錄,你是指從哪裏運行可執行文件的目錄? –