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/kmem
esiste, 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")))