คำถามที่น่าสนใจ; คุณมักจะไม่เห็นว่าเป็นการออกแบบ ฉันมีโปรแกรมที่ใช้เทคนิคคล้าย ๆ กันเพื่อบันทึกประวัติ แต่ใช้รูปแบบไบนารี 'ล็อกไฟล์' มีสี่ส่วนทั้งหมดจัดวางในรูปแบบที่เป็นกลางโดยใช้เครื่อง:
- ส่วนหัวที่มีหมายเลขเวทย์มนตร์และ (สูงสุด) จำนวนรายการในรายการที่ใช้และรายการว่างหมายเลขลำดับสำหรับรายการประวัติถัดไปจำนวนรายการจริงในรายการที่ใช้จำนวนรายการจริงในรายการฟรี และความยาวของไฟล์ (แต่ละไฟล์มีขนาด 4 ไบต์)
- รายการที่ใช้แต่ละรายการให้การชดเชยและความยาว (4 ไบต์สำหรับแต่ละส่วนของแต่ละรายการ)
- รายการฟรีแต่ละรายการคล้ายกับรายการที่ใช้
- ข้อมูลหลักแต่ละเร็กคอร์ดประวัติประกอบด้วยชุดไบต์ต่อเนื่องที่ถูกยกเลิกโดยไบต์เทอร์มิเนเตอร์ null
เมื่อมีการจัดสรรเร็กคอร์ดใหม่ถ้ามีพื้นที่ว่างในรายการว่างมันจะเขียนทับรายการนั้น (ไม่จำเป็นต้องใช้มันทั้งหมด - ซึ่งในกรณีที่ชิ้นส่วนยังคงอยู่ในรายการฟรี) เมื่อไม่มีที่ว่างในรายการว่างระบบจะจัดสรรพื้นที่ใหม่ในตอนท้าย เมื่อระเบียนเก่าหมุนออกพื้นที่ของมันจะถูกย้ายไปยังรายการว่างและเชื่อมโยงกับระเบียนว่างที่อยู่ติดกัน มันถูกออกแบบมาเพื่อจัดการกับคำสั่ง SQL เพื่อให้บันทึกสามารถแพร่กระจายไปหลายบรรทัด รหัสนี้ใช้ได้กับจำนวนเรคคอร์ดที่ระบุ ไม่ จำกัด ขนาดของไฟล์ต่อไฟล์ (แม้ว่ามันจะไม่ยากที่จะทำเช่นนั้น)
รหัสประวัติรหัสหลักอยู่ในสองไฟล์, history.c และ history.h, สามารถหาได้จากแหล่งที่มาสำหรับโปรแกรม SQLCMD (เวอร์ชั่นของฉันไม่ใช่ Microsoft, รุ่นของฉันมีอยู่สิบปีหรือมากกว่าก่อนหน้า Microsoft) ซึ่งสามารถดาวน์โหลดได้จาก ของกลุ่มผู้ใช้อินเตอร์ Informix ซอฟท์แวเอกสารเก่า นอกจากนี้ยังมีโปรแกรมดัมพ์ไฟล์ประวัติ (histdump.c) และตัวทดสอบประวัติ (histtest.ec - มันอ้างว่าเป็น ESQL / C แต่ตัวมันเองเป็นรหัส C จริงๆหนึ่งในฟังก์ชั่นการสนับสนุนที่เรียกใช้ Informix ESQL / C บางอย่าง ฟังก์ชั่นห้องสมุด) ติดต่อฉันหากคุณต้องการทดสอบโดยไม่ใช้ Informix ESQL / C - ดูโปรไฟล์ของฉัน มีการเปลี่ยนแปลงเล็กน้อยที่จะทำให้คอมไพล์ฮิสท์เทสนอกสภาพแวดล้อมการออกแบบรวมถึงคุณต้องมี makefile