2009-06-30 14 views
19

पर आउटपुट करने पर सी में पता लगाएं, मैं ओएस एक्स और लिनक्स के लिए एक सी प्रोग्राम लिख रहा हूं, और मैं आउटपुट को ट्विक करना चाहता हूं कि यह टर्मिनल पर जा रहा है या नहीं। मुझे पता है कि हमने इसे एक शेल स्क्रिप्ट में कैसे किया है, उदाहरण के लिए कवर किया है। यहाँ:टर्मिनल

Detecting the output stream type of a shell script

लेकिन मैं इसे कैसे एक सी कार्यक्रम में क्या करते हो?

उत्तर

36

उपयोग isatty():

$ man isatty 
ISATTY(3)     Linux Programmer's Manual     ISATTY(3) 

NAME 
     isatty - does this descriptor refer to a terminal 

SYNOPSIS 
     #include <unistd.h> 

     int isatty(int desc); 

DESCRIPTION 
     returns 1 if desc is an open file descriptor connected to a terminal 
     and 0 otherwise. 

stdout के बाद से हमेशा वर्णनकर्ता 1 फ़ाइल है, तो आप कर सकते हैं:

if(isatty(1)) 
    // stdout is a terminal 
+0

और आप एक छोटा सा गहरा समझा सकता है? इस फ़ंक्शन द्वारा वास्तव में क्या चेक किया गया है? वास्तव में 'टर्मिनल से कनेक्ट' का क्या अर्थ है? – xolodec

+0

@PavelShvechikov इसका मतलब है कि फ़ाइल डिस्क्रिप्टर एक डिवाइस से जुड़ा हुआ है जिसे टर्मिनल माना जाता है। Http://en.wikipedia.org/wiki/POSIX_terminal_interface देखें –

5
if (isatty (1)) 
    fprintf (stdout, "Outputting to a terminal."); 
else 
    fprintf (stdout, "Not outputting to a terminal.");