반응형
쓰기가 버퍼에 지속적으로 4K 바이트를 남기는 이유는 무엇입니까?
기본적으로 다음과 같은 코드가 있습니다.
int fileWrite(int file, void * pBuffer, size_t size)
{
size_t bytesWritten = (size_t)write( file, pBuffer, size ) ;
if (bytesWritten != size)
{
return -1;
}
return 0;
}
크기가 1GB일 경우 작동하지만 ~2GB일 경우 4K 바이트가 일정하게 남아있습니다.write를 loop에 싸서 버퍼를 위로 이동시키면 고칠 수 있는데 왜 항상 고장이 나는지 궁금합니다.
예를 들어 크기가 2147483648인 경우 write는 2147479552만 기록하고 4096은 기록하지 않습니다.왜 이런 일이 발생하며 항상 루프로 쓰기를 랩핑하는 것이 올바른가요?
다음에서 답을 찾을 수 있습니다.man 2 write:
이 숫자가 요청된 바이트 수보다 작으면 오류가 아닙니다. 예를 들어 디스크 장치가 가득 찼기 때문에 발생할 수 있습니다.
그리고 맨페이지의 설명에서:
ssize_t write(int fd, const void *buf, size_t count);POSIX.1에 따르면, 만약
count보다 큼SSIZE_MAX, 결과는 구현에 정의되어 있습니다. Linux의 상한에 대해서는 참고를 참조하십시오.메모들
리눅스에서,
write()(및 유사한 시스템 호출)이 최대 전송됩니다.0x7ffff000(2,147,479,552) 바이트로, 실제로 전송된 바이트 수를 반환합니다.(이는 32비트 시스템과 64비트 시스템 모두에서 해당됩니다.)
언급URL : https://stackoverflow.com/questions/61146723/why-does-write-continuously-leave-4k-bytes-in-the-buffer
반응형
'programing' 카테고리의 다른 글
| Git: 커밋을 리버스 병합하는 방법? (0) | 2023.10.27 |
|---|---|
| (및 배열)의 크기는 얼마나 됩니까? (0) | 2023.10.27 |
| RxJS - 오류가 발생하면 관측 가능이 완료되지 않습니다. (0) | 2023.10.27 |
| 시작 작업의 스크립트 블록에 제기된 예외를 캡처하는 방법은? (0) | 2023.10.27 |
| Python의 추상 속성 (0) | 2023.10.27 |