아마도 바보 같은 질문 일지 모르지만 프로그램이 비동기식으로 파일에 쓰는 중이고 파일을 쓰는 동안 해당 파일에 액세스하면 내용이 엉망이됩니까?노드 JS 비동기 읽기/쓰기 안전합니까?
4
A
답변
3
실제로 파일을 동 기적으로 또는 비동기 적으로 액세스하는지 여부는 중요하지 않습니다. 사용자가 독서 중일 때 다른 프로세스 (사용자 또는 다른 사람)가 파일을 수정하면 일치하지 않는 결과가 발생합니다.
표시되는 불일치의 종류는 파일 작성 방법 및 읽기 시작 시점에 따라 다릅니다.
노드의 기본값 인 mode (w
)에서 파일의 기존 내용은 파일을 열 때 잘립니다.
- 기내에서의 읽기는 오류없이 완료 될 때까지 일찍 중단됩니다. 즉, 원래 파일의 일정 비율 만 차지합니다.
- 쓰기가 시작된 후 시작된 읽기는 마지막으로 기록 된 바이트까지 읽습니다. 쓰기가 얼마나 빠르거나 빠르며, 파일을 읽는 방법에 따라 읽기는 전체 파일을 보거나 보지 못할 수도 있습니다.
r+
모드로 파일을 쓰는 경우 파일을 쓰기 위해 열 때 내용이 잘리지 않습니다. 즉, 읽기에는 이전 데이터의 일부와 새 데이터의 일부가 표시됩니다. 쓰기가 파일 크기를 변경하면 상황이 더욱 혼란스러워집니다.
스트림을 사용하는지 여부 (예 : createReadStream
), readFile
또는 readFileSync
에 관계없이 모두 true입니다. 디스크에있는 파일의 모든 부분은 노드가 파일을 메모리로 버퍼링하는 과정에서 변경 될 수 있습니다. (여기서 유일한 예외는 writeFileSync
을 사용한 다음 readFileSync
을 동일한 프로세스에으로 사용하는 것입니다. 쓰기 호출로 인해 쓰기가 완료 될 때까지 읽기가 시작되지 않을 수 있기 때문입니다. 그러나 다른 프로세스가 변경되는 것을 방지하지는 않습니다 파일 중간 읽기, 그리고 당신은 어쨌든 동기화 방법을 사용해서는 안됩니다.)
즉, 파일을 읽고 쓰는 것은 비 원자입니다. 불일치를 피하려면 임시 이름을 사용하여 파일을 작성한 다음 쓰기가 완료되면 rename
파일을 작성해야합니다.
관련 문제
- 1. 노드 js 비동기 호출
- 2. 노드 JS - DB 호출 비동기?
- 3. mongo에 대한 비동기 요청을위한 노드 js 미들웨어
- 4. 노드 JS 비동기 MongoDB를 찾기() 쿼리 배수
- 5. 노드 js 비동기 함수 및 스레드
- 6. 비동기 노드 JS API 호출로 고생
- 7. 노드 JS 콜백은 동기식
- 8. 노드 JS
- 9. 노드 JS
- 10. 노드 JS
- 11. 노드 JS
- 12. 노드 JS
- 13. 노드 js
- 14. React Native의 비동기 스토리지는 안전합니까?
- 15. 다음 반복 전에 노드 js for-loop 비동기 함수 대기?
- 16. 노드 JS CLI + 노드 라이브러리
- 17. 노드 디버그로 노드 js 디버그
- 18. 노드 스크립트에서 비동기 콜백 대기
- 19. 노드 JS async.map 시도
- 20. 노드 js Express 병렬 요청
- 21. 노드 비동기 설명이 필요합니다
- 22. 노드 비동기 작업 대기
- 23. 노드 비동기 경로 코드
- 24. 노드 sqlite3를 비동기 콜백
- 25. 노드 JS 동기 데이터베이스 호출
- 26. 노드 JS - 이상한 변수 범위
- 27. EJS는 사용하기에 안전합니까? (임베디드 JS)
- 28. 노드 JS 미성숙 프로그램 끝
- 29. 노드 js가있는 안전 비동기 코드
- 30. Q는 노드 js v/s에서 약속 함.