2011-03-30 3 views

답변

6

아니요 fopen(path, "w")이 실패 할 경우 파일 상태에 대한 보장이 없습니다. 실패는 파일을 여는 것, 잘라내기를 디스크에 커밋하는 것 등 모든 작업에서 발생할 수 있습니다. 실패가 제공하는 유일한 보장은 파일에 대한 액세스 권한이 없다는 것입니다.

0

fopen()이 실패하는 유일한 이유는 파일에 접근 할 수 없거나 수정할 수없는 경우입니다. 그래도 파일이 수정되는 것에 대해 걱정이된다면 O_WRITE 플래그와 함께 open() 명령을 사용할 수 있습니다. 그런 다음 fdopen()을 사용하여이를 FILE * 포인터로 변환 할 수 있습니다.

+0

여기서 fopen이 실패 할 수있는 하드웨어 오류는 무시합니다. – JaredPar

+0

'man fopen' : "fopen(), fdopen() 및 freopen() 함수도 실패하고 루틴에 지정된 오류 malloc (3) ". 그래서, 당신이 도입 한 것보다 실패 할 이유가 더 있습니다. – xappymah

+0

확인. 나는 그것을 몰랐다. 그러나 내 솔루션은 여전히 ​​파일이 수정되지 않았 음을 보증합니다. – Maz

0

훌륭한 질문입니다. 대답은 '아니오'라고 생각합니다. fopenFILE 구조체를 할당해야하며, 구현시 자연스러운 순서는 파일을 먼저 열고 나서 FILE을 할당하는 것입니다. 이 방법으로 fopenfdopen (또는 네임 스페이스 규격에 대한 일부 맨 앞의 밑줄 또는 띄어쓰기가있는 유사한 함수)의 래퍼입니다.

개인적으로 아무런 오류가 발생해도 파일 상태를 신경 쓰지 않으면 개인적으로는 stdio 기능을 사용하지 않습니다. 파일을 열어도 stdio의 버퍼링으로 인해 을 알기가 거의 불가능합니다. 쓰기 기능이 오류를 반환하고 파일을 사용 가능한 일관성있는 상태로 되돌릴 수없는 경우 오류가 발생하면 오류가 발생합니다.

관련 문제