मैं अपना खुद का psuedo-shell लिखना चाहता हूं और सुंदर रंग आदि प्राप्त करना चाहता हूं। मैं एक उपप्रचार को कैसे सोच रहा हूं कि यह एक टीटीवी में है? मैंने वर्चुअल टीटीवी के बारे में पढ़ा है, लेकिन इस बारे में ज्यादा व्यावहारिक जानकारी नहीं मिली है कि कैसे या तो एक बनाने के लिए या कैसे एक उपप्रजाति को लगता है कि isatty(stdout) == 1
।फ़ाइल जो इसाटी का जवाब देती है (3)
उत्तर
जो आप खोज रहे हैं उसे स्यूडोटेरिनल्स, छद्म-टीटीआई या पीटीआई कहा जाता है। ये मास्टर/गुलाम जोड़े में मौजूद हैं, जो सॉकेट जोड़े के समान व्यवहार करते हैं (पाइप का बिडरेक्शनल संस्करण; एक छोर पर जो लिखा जाता है उसे दूसरे पर पढ़ा जा सकता है)। नियंत्रित प्रक्रिया में, 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 कि अब मान्य नहीं है करने के लिए एक पुराने इंटरफ़ेस का प्रतिनिधित्व करते हैं।)
'के अलावा STDOUT_FILENO', आपको बच्चे के 'STDIN_FILENO' और 'STDERR_FILENO' पर पीटीई दास को' डुप्लिकेट 'करना चाहिए। – caf
संपादित, धन्यवाद। –
ग्रेट उत्तर, धन्यवाद! –