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