2010-11-08 6 views
5

मैं अपना खुद का psuedo-shell लिखना चाहता हूं और सुंदर रंग आदि प्राप्त करना चाहता हूं। मैं एक उपप्रचार को कैसे सोच रहा हूं कि यह एक टीटीवी में है? मैंने वर्चुअल टीटीवी के बारे में पढ़ा है, लेकिन इस बारे में ज्यादा व्यावहारिक जानकारी नहीं मिली है कि कैसे या तो एक बनाने के लिए या कैसे एक उपप्रजाति को लगता है कि isatty(stdout) == 1फ़ाइल जो इसाटी का जवाब देती है (3)

उत्तर

8

जो आप खोज रहे हैं उसे स्यूडोटेरिनल्स, छद्म-टीटीआई या पीटीआई कहा जाता है। ये मास्टर/गुलाम जोड़े में मौजूद हैं, जो सॉकेट जोड़े के समान व्यवहार करते हैं (पाइप का बिडरेक्शनल संस्करण; एक छोर पर जो लिखा जाता है उसे दूसरे पर पढ़ा जा सकता है)। नियंत्रित प्रक्रिया में, posix_openpt दास का नाम (शायद /dev/pts/X) प्राप्त करने के लिए ptsname का उपयोग एक मास्टर को खोलने के लिए है, तो:

int master = posix_openpt(O_RDWR | O_NOCTTY); 
grantpt(master);  /* change ownership and permissions */ 
unlockpt(master); /* must be called before obtaining slave */ 
int slave = open(ptsname(master), O_RDWR | O_NOCTTY); 

हमेशा की तरह, प्रत्येक कार्य असफल हो सकता है, तो त्रुटि जाँच जोड़ें। slave fd अब दास डिवाइस को संदर्भित करता है। दास स्यूडोटेर्मिनल में मानक आउटपुट सेट करने के लिए बाल प्रक्रिया में dup2(slave, STDOUT_FILENO) का उपयोग करें; इसी तरह stdin और stderr के लिए।

(ध्यान दें some Linux manpages गलत तरीके से बताती हैं कि posix_openpt रिटर्न char * इसके अलावा, कार्यों का openpty परिवार द्वारा भ्रमित हो नहीं है,। इन छद्म ttys कि अब मान्य नहीं है करने के लिए एक पुराने इंटरफ़ेस का प्रतिनिधित्व करते हैं।)

+1

'के अलावा STDOUT_FILENO', आपको बच्चे के 'STDIN_FILENO' और 'STDERR_FILENO' पर पीटीई दास को' डुप्लिकेट 'करना चाहिए। – caf

+0

संपादित, धन्यवाद। –

+0

ग्रेट उत्तर, धन्यवाद! –