2014-02-15 2 views
2

Если у меня есть два указателя файла и выполните следующие действия:Если два указателя файла указывают на один и тот же файл, достаточно закрыть одно из них?

FILE *f1,*f2; 
f1= fopen("inputfile","r+"); 
f2=f1; 
fclose(f2); 

ли равно операция действительна, если она есть, будет последняя строка близко f1, а?

+0

Если вы * на * Linux, то дважды открывайте файл в файлах f1 и f2. –

+3

Вы не закрываете указатель, вы закрываете объект, на который указывает указатель. –

+2

btw его довольно похоже на 'int * f1 = malloc (sizeof (int)); f2 = f1; free (f1); 'то использование' f2' вызывает неопределенное поведение. –

ответ

3

Достаточно, оба будут закрыты, и оба будут указывать на закрытый файл.

Назначение f2=f1 не делает ничего магического (увеличивая количество ссылок или дублирующих дескрипторов).

+1

Просто быть любопытным. Видя, что f1, f2 являются указателями, зачем вообще что-то особенное? Никакая функция не должна различать их, поскольку передача указателя в качестве параметра фактически делает копию данного указателя. Или есть что-то особенное в FILE *? – iolo

+1

@iolo Правильно! В них нет ничего особенного, и (в C) ничего не может произойти под капотом, просто произнеся «f2 = f1». – cnicutar

Смежные вопросы