2012-09-18 94 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

好的。一个问题。通过当前目录,你是指从哪里运行可执行文件的目录? –