ÔÚLinux´®¿Ú±à³ÌµÄһЩÎÊÌâ½â¾ö
ÆäʵÔÚlinux϶Դ®¿ÚµÄÉèÖÃÖ÷ÒªÊÇͨ¹ýtermiosÕâ¸ö½á¹¹ÌåʵÏֵ쬵«ÊÇÕâ¸ö½á¹¹ÌåȴûÓÐÌṩ¿ØÖÆRTS»ò»ñµÃCTSµÈ´®¿ÚÒý½Å״̬µÄ½Ó¿Ú£¬¿ÉÒÔͨ¹ýioctlϵͳµ÷ÓÃÀ´»ñµÃ/¿ØÖÆ¡£ »ñµÃ£º
ioctl(fd, TIOCMGET, &controlbits); if (controlbits & TIOCM_CTS) printf(¡°ÓÐÐźÅ\\n¡±); else
printf(¡°ÎÞÐźÅ\\n¡±); ÉèÖãº
ioctl(fd, TIOCMGET, &ctrlbits)£» if (flag)
ctrlbits |= TIOCM_RTS; else
ctrlbits &= ~TIOCM_RTS; ioctl(fd, TIOCMSET, &ctrlbits);
ÆäʵTIOCM_RTSÓÐЧºóÊǰѴ®¿ÚµÄRTSÉèÖÃΪÓÐÐźţ¬µ«´®¿ÚµÄµçƽΪµÍʱÊÇÓÐÐźţ¬Îª¸ßʱΪÎÞÐźţ¬ºÍÓÃ
TIOCMGET»ñµÃµÄ״̬ÕýºÃÏà·´£¬Ò²¾ÍÊÇ˵
TIOCMGET/TIOCMSETÖ»ÊÇ»ñµÃ/¿ØÖÆ´®¿ÚµÄÏàÓ¦Òý½ÅÊÇ·ñÓÐÐźţ¬²¢²»·´Ó¦µ±Ç°´®¿ÚµÄÕæÊµµçƽ¸ßµÍ¡£
ÍøÉÏÐí¶àÁ÷ÐеÄlinux´®¿Ú±à³ÌµÄ°æ±¾Öж¼Ã»¶Ôc_iflag£¨termios³ÉÔ±±äÁ¿£©Õâ¸ö±äÁ¿½øÐÐÓÐЧµÄÉèÖã¬ÕâÑù´«ËÍASCIIÂëʱûʲôÎÊÌ⣬
µ«´«ËͶþ½øÖÆÊý¾ÝʱÓöµ½0x0d,0x11ºÍ0x13È´»á±»¶ªµô¡£²»ÓÃ˵Ҳ֪µÀ£¬Õ⼸¸ö¿Ï¶¨ÊÇÌØÊâ×Ö·û£¬±»ÓÃ×÷ÌØÊâ¿ØÖÆÁË¡£¹ØµôICRNLºÍIXONÑ¡Ïî ¼´¿É½â¾ö¡£
c_iflag &= ~(ICRNL | IXON); 0x0d »Ø³µ·ûCR 0x11 ^Q VSTART×Ö·û 0x13 ^S VSTOP×Ö·û
ICRNL ½«ÊäÈëµÄCRת»»ÎªNL IXON ʹÆð¶¯/Í£Ö¹Êä³ö¿ØÖÆÁ÷Æð×÷Óà ÔÚ¡¶UNIX»·¾³¸ß¼¶±à³Ì
µÚ¶þ°æ¡·µÚ18ÕµÚ11С½Ú¿´µ½°ÑÖÕ¶ËI/OÉèÖÃΪÔʼģʽ£¨´®¿ÚͨѶ¾ÍÊÇÖÕ¶ËI/OµÄÔʼģʽ£©Ê±ÊäÈëÊôÐÔÉèÖÃΪ
term.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
ÆÁ±ÎÁËÐí¶àÊôÐÔ£¬¹Ö²»µÃÓÐÈË˵Èç¹ûÊÇʹÓô®¿ÚͨѶc_iflagºÍc_oflag¶¼ÉèÖÃΪ0¾ÍÐÐÁË£¡ ÒÔÏÂÊÇÎÒµÄÉèÖõÄÒ»Ð©ÖØÒªµÄ´®¿ÚÊôÐÔ term.c_cflag |= CLOCAL | CREAD;
term.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
term.c_oflag &= ~OPOST;
term.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
static void request_send(void) {
ioctl(fd,
TIOCMGET, &status);
status
&= ~TIOCM_RTS; // RTS Òý½Å¸ßµçƽ