में पीछे एक पाठ फ़ाइल पढ़ना सी में पीछे की फ़ाइल को पढ़ने का सबसे अच्छा तरीका क्या है? मुझे पहले पता है कि आप सोच रहे होंगे कि इसका कोई उपयोग नहीं है, लेकिन अधिकांश लॉग इत्यादि फ़ाइल के अंत में सबसे हालिया डेटा जोड़ते हैं। मैं पीछे की ओर फ़ाइल से पाठ में पढ़ने के लिए, लाइनों में यह बफरिंग चाहते हैं - किसी
एबीसी
है डीईएफ़
GHI
लाइनों में GHI, डीईएफ़, एबीसी पढ़ना चाहिए।
अब तक मैं कोशिश की है:
#include <stdio.h>
#include <stdlib.h>
void read_file(FILE *fileptr)
{
char currentchar = '\0';
int size = 0;
while(currentchar != '\n')
{
currentchar = fgetc(fileptr); printf("%c\n", currentchar);
fseek(fileptr, -2, SEEK_CUR);
if(currentchar == '\n') { fseek(fileptr, -2, SEEK_CUR); break; }
else size++;
}
char buffer[size]; fread(buffer, 1, size, fileptr);
printf("Length: %d chars\n", size);
printf("Buffer: %s\n", buffer);
}
int main(int argc, char *argv[])
{
if(argc < 2) { printf("Usage: backwards [filename]\n"); return 1; }
FILE *fileptr = fopen(argv[1], "rb");
if(fileptr == NULL) { perror("Error:"); return 1; }
fseek(fileptr, -1, SEEK_END); /* Seek to END of the file just before EOF */
read_file(fileptr);
return 0;
}
बस एक पंक्ति पढ़ सकते हैं और ऐसा करने से बफ़र करने की कोशिश में। क्षमा करें कि मेरा कोड भयानक है, मैं बहुत उलझन में आ रहा हूं। मुझे पता है कि आप सामान्य रूप से पूरी फ़ाइल के लिए स्मृति आवंटित करेंगे और फिर डेटा में पढ़ेंगे, लेकिन बड़ी फ़ाइलों के लिए जो लगातार बदलते हैं, मैंने सोचा कि यह सीधे पढ़ना बेहतर होगा (विशेष रूप से यदि मैं किसी फ़ाइल में टेक्स्ट खोजना चाहता हूं)।
अग्रिम
धन्यवाद * क्षमा करें, यह लिनक्स पर उपयोग किया जाएगा उल्लेख करना भूल गया तो नई-पंक्तियों सीआर बिना सिर्फ NL कर रहे हैं। *
आप संभवतः [स्मृति फ़ाइल को मैप करें] (http://en.wikipedia.org/wiki/Memory-mapped_file), और फ़ाइल को "पढ़ने" के लिए सूचक अंकगणित का उपयोग कर सकते हैं। फाइल पॉइंटर के साथ लगातार कूदने की तुलना में सरल हो सकता है। –
सी मानक से: 'एक बाइनरी स्ट्रीम को SEEK_END के किसी भी मूल्य के साथ fseek कॉल का अर्थपूर्ण रूप से समर्थन करने की आवश्यकता नहीं है। –
शायद आप सादा फ़ाइल के बजाय डीबी में लॉग इन कर सकते हैं? –