ฉันมีรหัสต่อไปนี้เป็นหลัก:
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 ไบต์อย่างสม่ำเสมอ ฉันสามารถแก้ไขได้โดยการเขียนการวนซ้ำและย้ายบัฟเฟอร์ขึ้น แต่ฉันอยากรู้ว่าทำไมมันล้มเหลวอยู่เสมอ
ตัวอย่างเช่นถ้าขนาดคือ 2147483648 เขียนเฉพาะเขียน 2147479552 ปล่อย 4096 ไม่ได้เขียน ทำไมสิ่งนี้ถึงเกิดขึ้นและถูกต้องหรือไม่ที่จะเขียนการวนซ้ำ
write
จะใช้ในครั้งเดียวขึ้นอยู่กับประเภทของ data sink file
(เช่นไฟล์ "ปกติ", ไพพ์, สตรีมซ็อกเก็ต, ซ็อกเก็ตดาตาแกรม, ... ) คุณจะเจาะจงมากขึ้นได้ไหม?
write
ไฟล์ทั้งหมดในครั้งเดียวหรือไม่? วิธีการปกติคือการสตรีมข้อมูลขนาดบัฟเฟอร์ในแต่ละครั้งจนกว่าคุณจะเขียนทุกอย่าง
write()
ไม่ต้องเขียนทั้งหมด (ซึ่งไปสำหรับบัฟเฟอร์ขนาดเล็กเกินไป)
SSIZE_MAX
ข้อ จำกัด write()
สเป็คบอกว่ามันเป็นหน้าที่ที่จะเขียนบัฟเฟอร์ไม่เต็มถึงแม้ว่ามันมักจะไม่ รหัสวนรอบน้อยลงในคำถามเป็นข้อบกพร่อง