दिलचस्प सवाल; आप आमतौर पर एक डिजाइन के रूप में नहीं देखते हैं। मेरे पास एक कार्यक्रम है जो इतिहास को रिकॉर्ड करने के लिए एक समान रूप से तकनीक का उपयोग करता है, लेकिन यह एक द्विआधारी प्रारूप का उपयोग करता है। 'लॉग फ़ाइल' में चार भाग होते हैं, जो सभी मशीन-तटस्थ प्रारूप में रखे जाते हैं:
- एक हेडर जिसमें जादू की संख्या और प्रयुक्त सूची और मुफ्त सूची में प्रविष्टियों की अधिकतम संख्या होती है, अगली इतिहास प्रविष्टि के लिए अनुक्रम संख्या, प्रयुक्त सूची में प्रविष्टियों की वास्तविक संख्या, मुफ्त सूची में प्रविष्टियों की वास्तविक संख्या होती है। , और फ़ाइल की लंबाई (जिनमें से प्रत्येक 4 बाइट्स है)।
- उपयोग की गई सूची, प्रत्येक प्रविष्टि एक ऑफसेट और एक लंबाई (प्रत्येक प्रविष्टि के प्रत्येक भाग के लिए 4 बाइट्स)।
- मुफ्त सूची, प्रत्येक प्रविष्टि प्रयुक्त सूची प्रविष्टि के समान है।
- मुख्य डेटा, प्रत्येक इतिहास रिकॉर्ड एक शून्य टर्मिनेटर बाइट द्वारा समाप्त बाइट्स के एक सन्निहित सेट से मिलकर बनता है।
जब एक नया रिकॉर्ड आवंटित किया जाता है, अगर मुक्त सूची में जगह होती है, तो यह वहां एक प्रविष्टि को अधिलेखित कर देता है (जरूरी नहीं कि यह सभी का उपयोग कर रहा हो - जिस स्थिति में मुफ्त सूची में टुकड़ा रहता है)। जब मुक्त सूची में कोई जगह नहीं होती है, तो अंत में नई जगह आवंटित की जाती है। जब एक पुराना रिकॉर्ड बाहर घूमता है, तो उसका स्थान मुक्त सूची में चला जाता है, और किसी भी आसन्न मुक्त रिकॉर्ड के साथ जमा होता है। यह एसक्यूएल स्टेटमेंट को संभालने के लिए बनाया गया है ताकि रिकॉर्ड कई लाइनों में फैल जाए। यह कोड निर्दिष्ट संख्या में रिकॉर्ड पर काम करता है। यह फ़ाइल के आकार को प्रति से सीमित नहीं करता है (हालांकि ऐसा करना कठिन नहीं होगा)।
मुख्य कोड इतिहास कोड दो फाइलों में है, history.c. और history.h, प्रोग्राम से स्रोत के लिए उपलब्ध SQLCMD (मेरा संस्करण, Microsoft का नहीं; मेरा Microsoft से एक दशक या उससे अधिक पहले अस्तित्व में था), जिसे डाउनलोड किया जा सकता है इंटरनेशनल इनफॉर्मिक्स यूजर ग्रुप के सॉफ्टवेयर आर्काइव । एक इतिहास फ़ाइल डंप प्रोग्राम (histdump.c) और एक इतिहास परीक्षक भी है (histtest.ec - यह ESQL / C होने का दावा करता है, लेकिन क्या यह वास्तव में C कोड है; इसे कॉल करने वाले समर्थन कार्यों में से एक कुछ Informix ESQL / C का उपयोग करता है; पुस्तकालय कार्य)। यदि आप Informix ESQL / C का उपयोग किए बिना प्रयोग करना चाहते हैं तो मुझसे संपर्क करें - मेरी प्रोफ़ाइल देखें। इसके डिज़ाइन मिलियू के बाहर हिस्टेस्ट को संकलित करने के लिए इसके लिए कुछ तुच्छ परिवर्तन हैं, साथ ही आपको एक मेफाइल की आवश्यकता है।