C'è un modo migliore del semplice tentativo di aprire il file?
int exists(const char *fname)
{
FILE *file;
if ((file = fopen(fname, "r")))
{
fclose(file);
return 1;
}
return 0;
}
fopen()/ fclose()è che potresti non essere in grado di aprire un file per la lettura anche se esiste. Ad esempio, /dev/kmemesiste, ma la maggior parte dei processi non può aprirlo nemmeno per la lettura. /etc/shadowè un altro file del genere. Naturalmente, entrambi stat()e si access()affidano alla possibilità di accedere alla directory contenente il file; tutte le scommesse sono disattivate se non puoi farlo (nessuna autorizzazione di esecuzione sulla directory contenente il file).
if (file = fopen(fname, "r"))darà un avvertimento. Usa la parentesi attorno all'istruzione all'interno dell'istruzione ifif ((file = fopen(fname, "r")))