Обработка ошибок при открытии файла
[Вопрос 1]
Когда я открываю файл в функцию, обычно я делаю что-то вроде этого:
int read_file (char *filename)
{
FILE *fin;
if ( !(fin = fopen(filename, "r")) )
return 1;
/* ... */
return fclose(fin);
}
int main ()
{
char filename[100];
if ( read_file(filename) )
{
perror(filename);
exit(1);
}
return 0;
}
В общем-то0
возвращаемое значение для ошибок (верно?), тогда я могу изменить предыдущий код на:
int read_file (char *filename)
{
FILE *fin;
if ( !(fin = fopen(filename, "r")) )
return 0;
/* ... */
return !fclose(fin);
}
int main ()
{
char filename[100];
if ( !read_file(filename) )
{
perror(filename);
exit(1);
}
return 0;
}
Но я думаю, что первый код более чистый.
Другой вариант это только изменениеreturn 1;
вreturn -1;
(в первом коде, который я написал).
Какие'лучшая версия?
[Вопрос 2]
Если я должен обработать больше ошибок, это правильный код как этот?
int read_file (char *filename, int **vet)
{
FILE *fin;
if ( !(fin = fopen(filename, "r")) )
{
perror(filename);
return 1;
}
* vet = malloc (10 * sizeof(int));
if ( *vet == NULL )
{
perror("Memory allocation error.\n");
return 1;
}
/* ... */
return fclose(fin);
}
int main ()
{
char filename[100];
int *vet;
if ( read_file(filename, &vet) )
exit(1);
return 0;
}