से पढ़ें मैं एक उपयोगिता लिख रहा हूं जो फ़ाइल नाम स्वीकार करता है, या stdin से पढ़ता है।फ़ाइल या stdin
मैं यह देखने के लिए सबसे मजबूत/सबसे तेज़ तरीका जानना चाहता हूं कि क्या स्टडीन मौजूद है (डेटा को डेटा पर पाइप किया जा रहा है) और यदि ऐसा डेटा पढ़ रहा है। यदि यह अस्तित्व में नहीं है, तो प्रसंस्करण दिए गए फ़ाइल नाम पर रखें। मैंने stdin
के आकार के लिए निम्न परीक्षण का उपयोग करने का प्रयास किया है, लेकिन मुझे विश्वास है क्योंकि यह एक स्ट्रीम है और वास्तविक फ़ाइल नहीं है, यह काम नहीं कर रहा है क्योंकि मुझे संदेह है कि यह होगा और यह हमेशा -1
प्रिंट कर रहा है। मुझे पता है कि मैं हमेशा एक समय में इनपुट 1 चरित्र पढ़ सकता हूं! = ईओएफ लेकिन मुझे एक और सामान्य समाधान चाहिए, इसलिए यदि मैं stdin मौजूद हूं तो मैं या तो एफडी या फ़ाइल * के साथ समाप्त कर सकता हूं ताकि शेष कार्यक्रम निर्बाध रूप से कार्य करेगा । मैं अपने आकार को जानने में सक्षम होना चाहूंगा, लंबित कार्यक्रम पिछले कार्यक्रम द्वारा बंद कर दिया गया है।
long getSizeOfInput(FILE *input){
long retvalue = 0;
fseek(input, 0L, SEEK_END);
retvalue = ftell(input);
fseek(input, 0L, SEEK_SET);
return retvalue;
}
int main(int argc, char **argv) {
printf("Size of stdin: %ld\n", getSizeOfInput(stdin));
exit(0);
}
टर्मिनल:
$ echo "hi!" | myprog
Size of stdin: -1
'feof' मुश्किल है क्योंकि यह आपको स्ट्रीम से पढ़ने और विफल होने का पूर्व प्रयास करने की आवश्यकता है। (और यदि आप ऐसा करते हैं, तो आप विफलता कारण की जांच भी कर सकते हैं।) यह स्पष्ट नहीं है कि आप इस स्थिति के लिए इसका उपयोग कैसे करते हैं। – jamesdlin