이 코드가 실행되면 두 개의 helloworld가 파일에 기록됩니다. 이유는 무엇입니까?
이 구절을 이해하는 방법:
업데이트 모드에서는 동일한 파일을 읽고 쓸 수 있습니다. fflush 또는
파일 위치 지정 기능은 읽기와 쓰기 사이에 호출되어야 하며
모드의 초기 항목 뒤에 b가 포함된 경우에는 그 반대입니다.
"rb" 또는 "w b"와 같은 문자는 바이너리 파일을 나타냅니다. 파일 이름은 최대
FILENAME_MAX자로 제한됩니다. FOPEN_MAX 파일을 한 번에 열 수 있습니다.
fopen
的第二个参数为模式, 有r
,w
,b
,a
等模式, 其中a
表示append
, 也就是附加的意思, 打开时不会清空文件(把EOF
指向0), 而是把文件指针指向文件末尾. 所以这个时候如果直接写的话不会覆盖原有的内容. 通过rewind
함수는 파일 포인터를 시작점으로 가리킵니다. 이때 쓰면 원래 내용을 덮어쓰게 됩니다. 으아악두 가지 이유가 있습니다. 추가 모드에 있고 마지막 helloworld를 삭제하지 않았으므로 마지막 시간과 현재 시간이 모두 거기에 있습니다
fopen("./log", "a+"); 이 문장은 읽기 및 쓰기 가능한 파일을 추가 방식으로 여는 것을 의미합니다. 파일이 존재하는 경우 원본 내용은 유지되고 데이터는 끝에 추가됩니다. 파일의.
이때, $fp 파일 포인터는 파일의 끝을 가리키며 동작합니다
fwrite($fp, '12345');
이때, fread($fp, 10) 을 직접 출력하면 빈 문자열이 됩니다. 이는 $fp 파일 포인터가 파일의 끝을 가리키기 때문입니다. 길이를 지정하면 거꾸로 읽어서 출력하게 됩니다. 확실히 비어있을 것입니다.
그리고 파일 포인터의 위치를 되감기 위해 rewind($fp);를 추가하면 $fp 포인터가 파일의 시작 부분을 가리키고 fread($fp, 10)을 인쇄하면 결과가 생성됩니다.
하지만 로그를 열면 매번 파일 끝에 추가됩니다.