stat возвращает ENOENT

Я запускаю следующую программу, которая проверяет, существует ли файл или не использует stat(), Но когда я прохожу путь, скажи: $HOME/file.sh, это не с ENOENT ошибка. Но когда я прохожу расширенный путь, т.е. /root/file.sh, stat() возвращает успех, т.е. код выхода 0.

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 ответ

strcpy() не будет расширять переменную среды $HOME к его значению, но скопирует строковый литерал извлечения, как указано. Вы можете получить значение $HOME с помощью getenv(),

Измените сообщение об ошибке на:

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

для подтверждения.

Другие вопросы по тегам