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

관련 문제