2016-01-01 13 views
5

में है, मैं कुछ स्ट्रिंग्स में रंग जोड़ने की कोशिश कर रहा था जिसे टर्मिनल में ansi escape कोड का उपयोग करके प्रदर्शित किया जाना है। अब तक मैंने पूरी एस्सी को कोड चीज़ से बच नहीं लिया है, बस कुछ बचने वाले कोड चिपकाने की प्रतिलिपि बनाकर कोशिश कर रहा है। फिर यह answer देखा जो यह सत्यापित करने के लिए कहा गया था कि प्रोग्राम को यह जांचना चाहिए कि उसे टर्मिनल में निष्पादित किया जा रहा है या फिर बचने वाले कोडों के साथ प्रदूषण तारों के बिना जारी है?सुनिश्चित करना कि प्रोग्राम टर्मिनल

उत्तर एक * आधारित समारोह isatty() nix जो मैं unistd.h में बसता था पता चला बदले में मेरी समझ के आधार पर सीपीपी मानक द्वारा cunistd करने के लिए प्रोत्साहित नहीं किया गया था जो कि यह पहली जगह में सी के मानक में नहीं था का उपयोग कैसे करें SO फिर से खोजने की कोशिश की लेकिन अच्छी तरह से समझने में सक्षम नहीं था। ascii मुक्ति कोड का उपयोग कर, क्रियान्वित किया है कि यह एक प्रारंभिक जांच की आवश्यकता है - एक कार्यक्रम कर सकते हैं

  • क्या पर्यावरण (सही शब्द?) में: अब मैं इस बारे में दो प्रश्न हैं? चूंकि मैं केवल क्ली के लिए बल्बिंग कर रहा हूं।
  • इस मुद्दे को संभालने के लिए आईएसओ सीपीपी मानकों के अनुसार उचित समाधान क्या होगा? unistd.h का उपयोग कर? क्या यह आधुनिक सीपीपी प्रथाओं तक सीमित होगा?

क्या उत्तर/रंग से संबंधित चीज़ से निपटने से पहले मुझे कुछ भी पढ़ना/समझना चाहिए?

+0

'unistd.h' एक POSIX हैडर, जो पूरी तरह से C और C++ मानकों के orthogonal है। मुझे नहीं लगता कि इनमें से किसी भी मानक में टर्मिनल की कोई धारणा है, इसलिए सिस्टम-विशिष्ट कार्यक्षमता के लिए सिस्टम एपीआई पर निर्भर रहने के लिए आपके पास बहुत कम विकल्प है। – melak47

+0

संबंधित: http://stackoverflow.com/questions/15331566/c-include-unistd-h-why-not-cunistd। –

उत्तर

4

एक पॉज़िक्स सिस्टम (जैसे लिनक्स या ओएसएक्स) पर isatty फ़ंक्शन वास्तव में सही फ़ंक्शन है यह निर्धारित करने के लिए कि क्या आप टर्मिनल पर आउटपुट कर रहे हैं या नहीं।

के रूप में यह प्रयोग करें

if (isatty(STDOUT_FILENO)) 
{ 
    // Output using VT100 control codes 
} 
else 
{ 
    // Output is not a TTY, could be a pipe or redirected to a file 
    // Use normal output without control codes 
} 
+0

पाइप और रीडायरेक्ट == बैश की '|' और '>'? और वीटी 100 क्या है? मेरा ज्ञान tty, pty, shells और gui-terminals तक सीमित है :( –

+2

आपको किसी विशेष टर्मिनल के अनुक्रमों को हार्ड-कोडिंग करने के बजाय, एस्केप अनुक्रम प्राप्त करने के लिए टर्म कैप लाइब्रेरी का उपयोग करना चाहिए। लेकिन सभी आधुनिक टर्मिनल अनुकरणकर्ता VT100 के आधार पर अनुक्रमों का उपयोग करते हैं 70 के दशक से टर्मिनल। – Barmar

+0

@ अहिनावगुनियल [विकिपीडिया आपका मित्र है] (https://en.wikipedia.org/wiki/VT100) :) –

संबंधित मुद्दे