2011-12-09 1 views
1

stdin이 열려 있다고 가정하는 C에서의 함수가 있습니다. 나는 stdin이 누군가에 의해 닫히지 않았는지 확인하기 위해 그것 앞에 어설 션을 추가하고 싶다. 누군가가 stdin을 닫지 않았는지 어떻게 확인할 수 있습니까?stdin이 열려 있습니다.

assert(is_open(stdin)); 
+2

왜이 점에 대해 걱정할 것입니까? 코드의 다른 부분이 표준을 닫을만큼 어리석은 것이라고 생각하게 만드는 이유는 무엇입니까? –

+0

@JonathanLeffler 전 직장에서 일 해요. 파일이 끝나면 파일을 열고 닫는 A() 함수를 작성할 수 있습니다. 다른 프로그래머는 STDIN을 매개 변수로 전달할 수 있습니다. 내 함수가 A() 함수 후에 호출되면 STDIN을 찾지 않습니다. 그래서 이유가 있습니다. –

+0

@ DanParadox : 동료는 파일을 열었을 때만 함수가 FILE *을 닫아야한다는 원칙을 채택해야합니다. –

답변

4

FILE*이 종료되었는지 확인할 수 없습니다. fclosefreeFILE 개체가 가리킬 수 있으므로 개체의 내용은 fclose 이후에 정의되지 않을 수 있습니다. stdin의 경우에도 마찬가지입니다. 이전에 제안한 해결책은 잘못되었습니다. 미안합니다. 그 정말 오히려 stdin 객체보다, 당신에게 표준 입력 FD에 대해 뭔가를 이야기하지만

당신이 POSIX 플랫폼에서 할 수있는 최선은

bool stdin_open() 
{ 
    errno = 0; 
    fcntl(STDIN_FILENO, F_GETFD); 
    return errno == EBADF; 
} 

같은 것입니다.