से पढ़ने के दौरान मैं पढ़ने के लिए टाइमआउट को कैसे कार्यान्वित कर सकता हूं, मैं फाइल डिस्क्रिप्टर और पॉज़िक्स/यूनिक्स रीड() फ़ंक्शन का उपयोग कर सी ++ में एक सीरियल पोर्ट से बाइट्स पढ़ रहा हूं। इस उदाहरण में, मैं सीरियल पोर्ट से 1 बाइट पढ़ रहा हूँ (बॉड दर सेटिंग्स और समान स्पष्टता के लिए छोड़े गए हैं): डिवाइस/dev/ttyS0 से जुड़े किसी भी जानकारी नहीं भेजतासीरियल पोर्ट (सी/सी ++)
#include <termios.h>
#include <fcntl.h>
#include <unistd.h>
int main(void)
{
int fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY);
char buf[1];
int bytesRead = read(fd, buf, 1);
close(fd);
return 0;
}
, तो प्रोग्राम होगा लटका। मैं टाइमआउट कैसे सेट कर सकता हूं?
मैं इस तरह एक समय बाहर स्थापित की कोशिश की है:
struct termios options;
tcgetattr(fd, &options);
options.c_cc[VMIN] = 0;
options.c_cc[VTIME] = 10;
tcsetattr(fd, TCSANOW, &options);
मैंने सोचा कि यह 1 सेकंड का समय समाप्त देना चाहिए था, लेकिन यह कोई फर्क नहीं पड़ता। मुझे लगता है कि मैंने वीएमआईएन और वीटीआईएमई को गलत समझा है। वीएमआईएन और वीटीआईएमई क्या उपयोग किया जाता है?
फिर मैंने वेब की खोज की और किसी को चुनिंदा() फ़ंक्शन के बारे में बात करने में पाया। क्या यह समाधान है और यदि ऐसा है, तो 1 सेकंड टाइमआउट करने के लिए उपरोक्त कार्यक्रम में कोई कैसे लागू होगा?
किसी भी मदद की सराहना की है। अग्रिम धन्यवाद :-)
'tcsetattr का उपयोग करना()' 'VTIME' सरल नहीं है की; इसके लिए अन्य मोड सेटिंग्स की आवश्यकता होती है जो कुछ धारावाहिक ड्राइवर समर्थन नहीं करते हैं। एक सामान्य समाधान के लिए मेरा जवाब देखें। – wallyk
यह सबसे अच्छा विवरण मैं vmin और VTIME [http://unixwiz.net/techtips/termios-vmin-vtime.html](http://unixwiz.net/techtips/termios- के लिए वेब पर का सामना करना पड़ा है vmin-vtime.html)। लेख के मुताबिक जब आईसीएएनओएन बिट बंद हो जाता है तो यह वीएमआईएन और वीटीआईएमई की व्याख्या को बदलने के लिए "कच्चा मोड" सक्षम बनाता है। आईसीएएनओएन बिट सेट करने से कोड को अपेक्षित काम मिल जाएगा। – arpl