सी में stdin
और STDIN_FILENO
के बीच व्यावहारिक अंतर क्या है?stdin और STDIN_FILENO के बीच क्या अंतर है?
उत्तर
इंटरफ़ेस। जैसा कि हर किसी ने कहा है, stdin
मानक सी लाइब्रेरी द्वारा परिभाषित FILE *
है। आप fread
, fwrite
, और fprintf
जैसे कुछ उच्च स्तरीय इंटरफेस का उपयोग कर सकते हैं। दूसरी तरफ, STDIN_FILENO
सिर्फ एक फाइल डिस्क्रिप्टर है (लगभग निश्चित रूप से 0)। यह read
और write
की पसंद के माध्यम से थोड़ा सा स्तर इंटरफ़ेस का उपयोग करता है।
कोई भी जवाब उल्लेख नहीं करता है कि 'STDIN_FILENO''
@ किथ थॉम्पसन धन्यवाद, यह देख रहा था! – KGCybeX
stdin
एक डिफ़ॉल्ट फ़ाइल में मानक के अलावा अन्य कोई से इनपुट प्राप्त करने के लिए इस्तेमाल किया सूचक है।
STDIN_FILENO
डिफ़ॉल्ट मानक इनपुट फ़ाइल वर्णनकर्ता संख्या जो 0
है। यह सामान्य रूप से सामान्य उपयोग के लिए एक परिभाषित निर्देश है।
/usr/include/stdio.h
से,
/* Standard streams. */
extern struct _IO_FILE *stdin; /* Standard input stream. */
extern struct _IO_FILE *stdout; /* Standard output stream. */
extern struct _IO_FILE *stderr; /* Standard error output stream. */
/* C89/C99 say they're macros. Make them happy. */
#define stdin stdin
#define stdout stdout
#define stderr stderr
से /usr/include/unistd.h
/* Standard file descriptors. */
#define STDIN_FILENO 0 /* Standard input. */
#define STDOUT_FILENO 1 /* Standard output. */
#define STDERR_FILENO 2 /* Standard error output. */
पूर्व, stdin
(_IO_FILE
/usr/include/libio.h
में परिभाषित) एक संरचना डेटा है। STDIN_FILENO
एक मैक्रो स्थिरांक है, जो कर्नेल द्वारा उपयोग किए जाने वाले फ़ाइल डिस्क्रिप्टर को इंगित करता है।
#include <stdio.h>
#include <unistd.h>
void
stdin_VS_STDIN_FILENO(void)
{
printf("stdin->_flags = %hd\n", stdin->_flags);
printf("STDIN_FILENO : %d\n", STDIN_FILENO);
}
int
main(void)
{
stdin_VS_STDIN_FILENO();
return 0;
}
[विषय पर एक दिलचस्प चर्चा] (http://www.rtems.com/ml/rtems-users/2011/march/msg00101.html)। शायद आपको यह भी पूछना चाहिए कि 'fileno (stdin) '' STDIN_FILENO' से अलग क्यों है। – user7116
@ user7116 आपका लिंक दुर्भाग्य से मृत है। –
यह लिंक काम करता है http://www.rtems.org/ml/rtems-users/2011/march/thrd1.html#00101 – pixelbeat