आपको फ़ाइल की प्रतिलिपि बनाने के लिए उपयोगिता फ़ंक्शन नहीं मिल रहा है क्योंकि इसकी आवश्यकता नहीं है; इसे 'स्पेयर पार्ट्स' से बनाया जा सकता है। unlink()
और symlink()
जैसे कार्यों को अन्य कार्यों के संदर्भ में नहीं बनाया जा सकता है, जबकि एक hypothetical copy_file()
जैसे कार्यों (तो आपको चाहिए)।
को देखते हुए दो खुले फ़ाइल धाराओं, पढ़ने के लिए f1
और f2
लिखने के लिए है, तो आप इस्तेमाल कर सकते हैं:
void fcopy(FILE *f1, FILE *f2)
{
char buffer[BUFSIZ];
size_t n;
while ((n = fread(buffer, sizeof(char), sizeof(buffer), f1)) > 0)
{
if (fwrite(buffer, sizeof(char), n, f2) != n)
err_syserr("write failed\n");
}
}
err_syserr()
समारोह स्ट्रिंग एक तर्क के रूप में पारित और त्रुटि संदेश से गर्भित सहित त्रुटि रिपोर्टिंग के लिए है errno
*; यह वापस नहीं आता है। BUFSIZ
को <stdio.h>
में परिभाषित किया गया है लेकिन आप एक बड़े मूल्य का उपयोग करना चुन सकते हैं। आप इस तरह की त्रुटि रिपोर्ट नहीं करना पसंद कर सकते हैं, लेकिन सफलता पर फंक्शन 0 और किसी भी विफलता पर फ़ंक्शन वापस कर सकते हैं।
int fcopy(FILE *f1, FILE *f2)
{
char buffer[BUFSIZ];
size_t n;
while ((n = fread(buffer, sizeof(char), sizeof(buffer), f1)) > 0)
{
if (fwrite(buffer, sizeof(char), n, f2) != n)
return -1;
}
return 0;
}
ध्यान दें कि फ़ंक्शन फ़ाइलों को नहीं खोलता है, इसलिए यह उन्हें बंद नहीं करता है। इसका अर्थ यह है कि आप इसे एकाधिक इनपुट फ़ाइलों को एक आउटपुट फ़ाइल में जोड़ने के लिए उपयोग कर सकते हैं, उदाहरण के लिए। आप एक फ़ाइल को पढ़ने के लिए एक फ़ाइल खोलने के लिए एक रैपर फ़ंक्शन का उपयोग कर सकते हैं और दूसरे को लिखने के लिए।
*वास्तव में, err_syserr()
जो एक प्रारूप स्ट्रिंग और अन्य तर्क लेता है, और उसके बाद का वर्णन किया और बाहर निकलता है के रूप में त्रुटि संदेश रिपोर्ट printf()
की तरह एक समारोह है।
फ़ाइल की प्रतिलिपि बनाना एक लंबा चल रहा है और जटिल संचालन है; यहां तक कि जहां ओएस में सिस्टम-लाइब्रेरी 'कॉपीफाइल' फ़ंक्शन (जैसे विंडोज करता है) है, यह _system call_ के रूप में लागू करने की संभावना नहीं है बल्कि उपयोगिता फ़ंक्शन के रूप में लागू किया जा सकता है। प्रतिलिपि बनाने के कई तरीके हैं, और यूएन * एक्स ने कभी भी चीजों को करने के बारे में बहुत स्पष्ट नहीं चुना है (यानी फ़ाइल कॉपी बनाने के लिए 'प्रतिलिपि') को सुनहरा मार्ग के रूप में बेचें। –