의 내가 내 프로그램 어딘가에
fopen
으로 파일을 열고 다음 내 프로그램이 다른 작업을 수행하는 기능을 가지고 있다고 가정 해 봅시다 (예를 들어, 뭔가를 계산하려고) 그런 다음 일부 Null 포인터 또는 스택 오버플로 또는 조각화 오류 등으로 인해 충돌이 발생합니다.이 파일이 내가 열어 본 파일을 파괴하거나 망칠 가능성이 있습니까?는 fopen의 또는 fstream 등을하는 실수로 파일을 파괴 할 수있는 C/C++글씨로 열어 본 경우 어떻게됩니까? 그러면 더 위험할까요?
답변
당신은 다음 없는, 당신이 할 수있는 손상되지 파일을를 읽고 위해 파일을 열 경우. 당신이 다음 예를 작성 위해 파일을 열 경우
, 약간의 손상 상태에서 파일을 떠나 항상 가능하다.
나는 OS에 많이 의존 할 수 있다고 생각한다. 그러나 네, 상식은 당신의 대답이 옳다고 말합니다. – bolov
Er, 데이터를 단순히 _reading_하면 취약하게 만드는 OS/FS는 사용할 수 없습니다. 그것은 단지 상식이 아니라 필요한 기능입니다. –
적어도 일부 플랫폼 및 파일 시스템 유형에서 파일 읽기는 파일과 관련된 일부 메타 데이터, 특히 타임 스탬프 정보를 업데이트합니다. 그래서 읽기는 실제로 파일 시스템의 일부분에 쓰기를 포함합니다. 리눅스 파일 시스템에서, 내가 아는 한 문제의 메타 데이터 영역은 고정 된 크기이며, 실패한 쓰기가 파일이나 디렉토리에 결함을 남길 수 있다고 생각하지 않는다. 어쨌든 나는 그런 일이 일어나는 것을 본 적이 없다. 그러나 나는 모든 상황에서 파일 시스템을 불만족스럽게하는 읽기 실패로 인해 불가능하다고 생각하여 안전하게 사용할 수 있다고 생각하지 않는다. –
파일을 쓰기 위해 열면 해당 파일이 존재해도 그 내용은 파괴됩니다. –
C 또는 C++의 언어는 무엇입니까? 그들은 다른 언어입니다. C++에는'ifstream'이 있고 C 언어에는 없습니다. C++에는 사용자 정의 클래스의 인스턴스에서 읽을 수 있도록 오버로드 할 수있는 스트림 추출 연산자가 있습니다. –
오픈시 파일 내용 파괴는 사용자가 여는 방법에 따라 다릅니다. w와 w + 그리고 내용은 사라진다. a, r + a + 그리고 그 내용은 여전히 존재합니다. – user4581301