Tôi về cơ bản có mã sau đây:
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;
}
Nó hoạt động nếu kích thước là 1GB, nhưng khi kích thước ~ 2GB, nó sẽ nhận được 4K byte một cách nhất quán. Tôi có thể khắc phục điều này bằng cách gói ghi trong một vòng lặp và di chuyển bộ đệm lên nhưng tôi tò mò về lý do tại sao nó luôn bị lỗi.
Ví dụ: nếu kích thước là 2147483648, hãy viết chỉ ghi 2147479552, để lại 4096 không ghi tên. Tại sao điều này sẽ xảy ra và nó có đúng không khi luôn luôn viết ghi trong một vòng lặp?
write
sẽ tiêu thụ cùng một lúc tùy thuộc vào loại dữ liệu chìm file
(ví dụ: tệp "thông thường", đường ống, ổ cắm luồng, ổ cắm datagram, ...). Bạn có thể cụ thể hơn không?
write
toàn bộ tập tin cùng một lúc? Cách tiếp cận thông thường là truyền dữ liệu theo kích thước bộ đệm tại một thời điểm cho đến khi bạn viết mọi thứ.
write()
không phải viết tất cả (cũng dành cho bộ đệm nhỏ)
SSIZE_MAX
hạn chế. Thông write()
số kỹ thuật nói rằng không có nghĩa vụ phải viết bộ đệm đầy đủ, ngay cả khi nó hầu như luôn luôn như vậy. Mã không có vòng lặp trong câu hỏi là một lỗi.