tty_ioctl

Autres langues

Langue: ja

Version: 2002-12-29 (openSuse - 09/10/07)

Section: 4 (Pilotes et protocoles réseau)

̾Á°

tty ioctl - üËö¤È¥·¥ê¥¢¥ë¥é¥¤¥ó¤Î ioctl (Æþ½ÐÎÏÀ©¸æ)

½ñ¼°

#include <termios.h>

int ioctl(int fd, int cmd, ...);

ÀâÌÀ

üËö¤È¥·¥ê¥¢¥ë¥Ý¡¼¥È¤Ë¤Ä¤¤¤Æ¤Î ioctl() ¥³¡¼¥ë¤Ï¡¢Â¿¤¯¤Î¥³¥Þ¥ó¥É°ú¤­¿ô¤ò¼õ¤±ÉÕ¤±¤ë¡£ ¿¤¯¤¬¤¤¤í¤¤¤í¤Ê·¿¤Î 3 ÈÖÌܤΰú¤­¿ô¤òɬÍפȤ¹¤ë¡£ ¤³¤³¤Ç¤Ï argp ¤Þ¤¿¤Ï arg ¤È¸Æ¤Ö¡£

ioctl ¤ò»ÈÍѤ¹¤ë¤È°Ü¿¢À­¤Î¤Ê¤¤¥×¥í¥°¥é¥à¤Ë¤Ê¤ë¡£ ²Äǽ¤Ê¾ì¹ç¤Ï¡¢ termios(3) ¤Ëµ­½Ò¤µ¤ì¤Æ¤¤¤ë POSIX ¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò»È¤¦¤³¤È¡£

üËö°À­¤Î¼èÆÀ¤ÈÀßÄê

TCGETS        struct termios *argp
tcgetattr(fd, argp) ¤ÈƱ¤¸¡£

¸½ºß¤Î¥·¥ê¥¢¥ë¥Ý¡¼¥È¤ÎÀßÄê¤ò¼èÆÀ¤¹¤ë¡£
TCSETS const struct termios *argp
tcsetattr(fd, TCSANOW, argp) ¤ÈƱ¤¸¡£

¸½ºß¤Î¥·¥ê¥¢¥ë¥Ý¡¼¥È¤ÎÀßÄê¤òÊѹ¹¤¹¤ë¡£
TCSETSW        const struct termios *argp
tcsetattr(fd, TCSADRAIN, argp) ¤ÈƱ¤¸¡£

ÇӽР(drain) ¤ò¹Ô¤¦¤¿¤á¤Î½ÐÎϥХåե¡¤Î»ÈÍѤòµö²Ä¤·¡¢ ¸½ºß¤Î¥·¥ê¥¢¥ë¥Ý¡¼¥È¤ÎÀßÄê¤òÊѹ¹¤¹¤ë¡£
TCSETSF        const struct termios *argp
tcsetattr(fd, TCSAFLUSH, argp) ¤ÈƱ¤¸¡£

ÇӽР(drain) ¤ò¹Ô¤¦¤¿¤á¤Î½ÐÎϥХåե¡¤Î»ÈÍѤòµö²Ä¤·¡¢ ½èÍý¤·¤Æ¤¤¤Ê¤¤ÆþÎϤòÇË´þ¤·¤Æ¡¢ ¸½ºß¤Î¥·¥ê¥¢¥ë¥Ý¡¼¥È¤ÎÀßÄê¤òÊѹ¹¤¹¤ë¡£

°Ê²¼¤Î 4 ¤Ä¤Î ioctl ¤Ï TCGETS, TCSETS, TCSETSW, TCSETSF ¤È»÷¤Æ¤¤¤ë¡£ ¤¿¤À¤·¡¢ struct termios * ¤ÎÂå¤ï¤ê¤Ë struct termio * ¤ò¼è¤ë¡£

TCGETA struct termio *argp
TCSETA        const struct termio *argp
TCSETAW       const struct termio *argp
TCSETAF       const struct termio *argp

termios ¹½Â¤ÂΤΥí¥Ã¥¯

üËö¤Î termios ¹½Â¤ÂΤϥí¥Ã¥¯¤¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¢¤ë¡£
¤³¤Î¥í¥Ã¥¯¼«ÂÎ¤Ï termios ¹½Â¤ÂΤǤ¢¤ê¡¢ 0 ¤Ç¤Ê¤¤¥Ó¥Ã¥È¤Þ¤¿¤Ï¥Õ¥£¡¼¥ë¥É¤Ï¥í¥Ã¥¯¤µ¤ì¤¿Ãͤò¼¨¤¹¡£
TIOCGLCKTRMIOS struct termios *argp
üËö¤Î termios ¹½Â¤ÂΤΥí¥Ã¥¯¾õÂÖ¤ò¼èÆÀ¤¹¤ë¡£
TIOCSLCKTRMIOS const struct termios *argp
üËö¤Î termios ¹½Â¤ÂΤΥí¥Ã¥¯¾õÂÖ¤òÀßÄꤹ¤ë¡£
root ¤Î¤ß¤¬¤³¤ì¤ò¼Â¹Ô¤Ç¤­¤ë¡£

¥¦¥£¥ó¥É¥¦¥µ¥¤¥º¤Î¼èÆÀ¤ÈÀßÄê

¥¦¥£¥ó¥É¥¦¥µ¥¤¥º¤Ï¥«¡¼¥Í¥ëÆâ¤ËÊÝ»ý¤µ¤ì¤ë¤¬¡¢ ¥«¡¼¥Í¥ë¤Ë¤è¤Ã¤Æ»ÈÍѤµ¤ì¤Ê¤¤ (²¾ÁÛ¥³¥ó¥½¡¼¥ë¤Î¾ì¹ç¤ÏÎã³°¤Ç¤¢¤ê¡¢¿·¤·¤¤¥Õ¥©¥ó¥È¤òÆɤ߹þ¤ó¤À¾ì¹ç¤Ê¤É¡¢ ²¾ÁÛüËö¤Î¥µ¥¤¥º¤¬Êѹ¹¤µ¤ì¤¿¾ì¹ç¡¢¥«¡¼¥Í¥ë¤Ï¥¦¥£¥ó¥É¥¦¥µ¥¤¥º¤ò¹¹¿·¤¹¤ë)¡£
TIOCGWINSZ     struct winsize *argp
¥¦¥£¥ó¥É¥¦¥µ¥¤¥º¤ò¼èÆÀ¤¹¤ë¡£
TIOCSWINSZ     const struct winsize *argp
¥¦¥£¥ó¥É¥¦¥µ¥¤¥º¤òÀßÄꤹ¤ë¡£

¤³¤ì¤é¤Î ioctl ¤Ç»ÈÍѤµ¤ì¤ë¹½Â¤ÂΤϡ¢°Ê²¼¤Î¤è¤¦¤ËÄêµÁ¤µ¤ì¤ë¡£


struct winsize {

    unsigned short ws_row;

    unsigned short ws_col;

    unsigned short ws_xpixel;   /* ̤»ÈÍÑ */

    unsigned short ws_ypixel;   /* ̤»ÈÍÑ */

};

¥¦¥£¥ó¥É¥¦¥µ¥¤¥º¤¬Êѹ¹¤µ¤ì¤¿¾ì¹ç¡¢ ¥Õ¥©¥¢¥°¥é¥¦¥ó¥É¥×¥í¥»¥¹¥°¥ë¡¼¥×¤Ë SIGWINCH ¥·¥°¥Ê¥ë¤¬Á÷¤é¤ì¤ë¡£

break ¤ÎÁ÷¿®

TCSBRK        int arg
tcsendbreak(fd, arg) ¤ÈƱ¤¸¡£

üËö¤¬ÈóƱ´ü¥·¥ê¥¢¥ë¥Ç¡¼¥¿Å¾Á÷¤ò»ÈÍѤ·¤Æ¤ª¤ê¡¢ arg ¤¬ 0 ¤Î¾ì¹ç¡¢0.25 ¤«¤é 0.5 ÉÃ¤Î´Ö¤Ë break (0 ¤Î¥Ó¥Ã¥ÈÎó¤Î¥¹¥È¥ê¡¼¥à) ¤¬Á÷¿®¤µ¤ì¤ë¡£ üËö¤¬ÈóƱ´ü¥·¥ê¥¢¥ë¥Ç¡¼¥¿Å¾Á÷¤ò»ÈÍѤ·¤Æ¤¤¤ë¾ì¹ç¡¢ break ¤¬Á÷¿®¤µ¤ì¤ë¤«¡¢¤³¤Î´Ø¿ô¤Ï²¿¤â¤»¤º¤ËÊ֤롣 arg ¤¬ 0 °Ê³°¤Î¾ì¹ç¡¢²¿¤¬µ¯¤³¤ë¤«Ê¬¤«¤é¤Ê¤¤¡£

(SVr4, UnixWare, Solaris, Linux ¤Ï¡¢ tcsendbreak(fd,arg) ¤Î arg ¤¬ 0 °Ê³°¤Î¾ì¹ç¡¢ tcdrain(fd) ¤Î¤è¤¦¤Ë°·¤¦¡£ SunOS ¤Ï arg ¤òÇÜ¿ô¤È¤·¤Æ°·¤¤¡¢¥Ó¥Ã¥È¤Î¥¹¥È¥ê¡¼¥à¤ò arg ²óÁ÷¿®¤¹¤ë¡£ arg ¤¬ 0 ¤Î¾ì¹ç¤âƱ¤¸¡£ DG/UX ¤È AIX ¤Ï¡¢(0 °Ê³°¤Î¾ì¹ç) arg ¤ò¥ß¥êÉÃñ°Ì¤Î»þ´Ö´Ö³Ö¤È¤·¤Æ°·¤¦¡£ HP-UX ¤Ï arg ¤ò̵»ë¤¹¤ë¡£)

TCSBRKP        int arg
¤¤¤ï¤æ¤ë¡ÖPOSIX ÈǡפΠTCSBRK ¤Ç¤¢¤ë¡£
¤³¤ì¤Ï 0 °Ê³°¤Î arg ¤ò 1/10 ÉÃñ°Ì¤Î»þ´Ö´Ö³Ö¤È¤·¤Æ°·¤¦¡£ ¤Þ¤¿¥É¥é¥¤¥Ð¤¬ break ¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¡¢²¿¤â¤·¤Ê¤¤¡£
TIOCSBRK       void
break ¤ò¥ª¥ó¤Ë¤¹¤ë¡£
¤Ä¤Þ¤ê 0 ¤Î¥Ó¥Ã¥ÈÎó¤ÎÁ÷¿®¤ò³«»Ï¤¹¤ë¡£
TIOCCBRK       void
break ¤ò¥ª¥Õ¤Ë¤¹¤ë¡£
¤Ä¤Þ¤ê 0 ¤Î¥Ó¥Ã¥ÈÎó¤ÎÁ÷¿®¤òÄä»ß¤¹¤ë¡£

¥½¥Õ¥È¥¦¥§¥¢¥Õ¥í¡¼À©¸æ

TCXONC        int arg
tcflow(fd, arg) ¤ÈƱ¤¸¡£

tcflow(3) ¤Î°ú¤­¿ô TCOOFF, TCOON, TCIOFF, TCION ¤ò»²¾È¤¹¤ë¤³¤È¡£

¥Ð¥Ã¥Õ¥¡¤Î¥«¥¦¥ó¥È¤È½ñ¤­½Ð¤· (flush)

FIONREAD      int *argp
ÆþÎϥХåե¡¤Ë¤¢¤ë¥Ð¥¤¥È¿ô¤ò¼èÆÀ¤¹¤ë¡£
TIOCINQ        int *argp
FIONREAD ¤ÈƱ¤¸¡£
TIOCOUTQ       int *argp
½ÐÎϥХåե¡¤Ë¤¢¤ë¥Ð¥¤¥È¿ô¤ò¼èÆÀ¤¹¤ë¡£
TCFLSH int arg
tcflush(fd, arg) ¤ÈƱ¤¸¡£

tcflush(3) ¤Î°ú¤­¿ô TCIFLUSH, TCOFLUSH, TCIOFLUSH ¤ò»²¾È¤¹¤ë¤³¤È¡£

ÆþÎϤε¶Áõ

TIOCSTI       const char *argp
»ØÄꤵ¤ì¤¿¥Ð¥¤¥È¤òÆþÎÏ¥­¥å¡¼¤ËÁÞÆþ¤¹¤ë¡£

¥³¥ó¥½¡¼¥ë½ÐÎϤΥê¥À¥¤¥ì¥¯¥È

TIOCCONS      void
/dev/console ¤Þ¤¿¤Ï
/dev/tty0 ¤ËÁ÷¤é¤ì¤ë½ÐÎϤò¡¢»ØÄꤵ¤ì¤¿Ã¼Ëö (tty) ¤Ë¥ê¥À¥¤¥ì¥¯¥È¤¹¤ë¡£ »ØÄꤵ¤ì¤¿Ã¼Ëö¤¬µ¿»÷üËö (pty) ¤Î¥Þ¥¹¥¿¤Î¾ì¹ç¡¢½ÐÎϤϥ¹¥ì¡¼¥Ö¤ËÁ÷¤é¤ì¤ë¡£ ½ÐÎϤ¬¤Þ¤À¥ê¥À¥¤¥ì¥¯¥È¤µ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¡¢ ï¤Ç¤â¥ê¥À¥¤¥ì¥¯¥È¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤­¤ë¡£ ´û¤Ë¥ê¥À¥¤¥ì¥¯¥È¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï EBUSY ¤¬ÊÖ¤µ¤ì¤ë¤¬¡¢ root ¤Ï¡¢ /dev/console ¤Þ¤¿¤Ï /dev/tty0 ¤ò»Ø¤¹ fd ¤ËÂФ·¤Æ¤³¤Î ioctl ¤ò»ÈÍѤ¹¤ë¤³¤È¤Ë¤è¤ê¡¢¥ê¥À¥¤¥ì¥¯¥È¤ò»ß¤á¤ë¤³¤È¤¬¤Ç¤­¤ë¡£

üËö¤ÎÀ©¸æ

TIOCSCTTY     int arg
»ØÄꤵ¤ì¤¿Ã¼Ëö¤ò¥«¥ì¥ó¥È¥×¥í¥»¥¹¤ÎÀ©¸æüËö¤Ë¤¹¤ë¡£
¥«¥ì¥ó¥È¥×¥í¥»¥¹¤Ï¥»¥Ã¥·¥ç¥ó¥ê¡¼¥À¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤º¡¢ ¤«¤Ä´û¤ËÀ©¸æüËö¤ò»ý¤Ã¤Æ¤¤¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£ ¤³¤ÎüËö¤¬´û¤Ë¾¤Î¥»¥Ã¥·¥ç¥ó¥°¥ë¡¼¥×¤ÎÀ©¸æüËö¤Ç¤¢¤ë¾ì¹ç¡¢ ioctl ¤Ï EPERM ¤Ç¼ºÇÔ¤¹¤ë¡£ ¤¿¤À¤·¸Æ¤Ó½Ð¤·¤¿¥æ¡¼¥¶¤¬ root ¤Ç¡¢ ¤«¤Ä arg ¤¬ 1 ¤Ç¤¢¤ë¾ì¹ç¤ò½ü¤¯¡£ ¤³¤Î¾ì¹ç¡¢Ã¼Ëö¤ÏÅð¤Þ¤ì (stolen)¡¢ ¤³¤ÎüËö¤òÀ©¸æüËö¤È¤·¤Æ¤¤¤¿Á´¤Æ¤Î¥×¥í¥»¥¹¤ÏüËö¤ò¼º¤¦¡£
TIOCNOTTYvoid
»ØÄꤵ¤ì¤¿Ã¼Ëö¤¬¥«¥ì¥ó¥È¥×¥í¥»¥¹¤ÎÀ©¸æüËö¤Ç¤¢¤ë¾ì¹ç¡¢ ¤³¤ÎÀ©¸æüËö¤òÊü´þ¤¹¤ë¡£ ¥×¥í¥»¥¹¤¬¥»¥Ã¥·¥ç¥ó¥ê¡¼¥À¤Î¾ì¹ç¡¢ ¥Õ¥©¥¢¥°¥é¥¦¥ó¥É¥×¥í¥»¥¹¥°¥ë¡¼¥×¤Ë SIGHUP ¤È SIGCONT ¤òÁ÷¤ê¡¢ ¥«¥ì¥ó¥È¥»¥Ã¥·¥ç¥ó¤ÎÁ´¤Æ¤Î¥×¥í¥»¥¹¤ÏÀ©¸æüËö¤ò¼º¤¦¡£

¥°¥ë¡¼¥× ID ¤È¥»¥Ã¥·¥ç¥ó ID ¤Î½èÍý

TIOCGPGRP     pid_t *argp
À®¸ù¤·¤¿¾ì¹ç¡¢
*argp = tcgetpgrp(fd) ¤ÈƱ¤¸¡£
¤³¤ÎüËö¾å¤Î¥Õ¥©¥¢¥°¥é¥¦¥ó¥É¥×¥í¥»¥¹¤Î¥×¥í¥»¥¹¥°¥ë¡¼¥× ID ¤ò¼èÆÀ¤¹¤ë¡£
TIOCSPGRP      const pid_t *argp
tcsetpgrp(fd, *argp) ¤ÈƱ¤¸¡£

¤³¤ÎüËö¤Î¥Õ¥©¥¢¥°¥é¥¦¥ó¥É¥×¥í¥»¥¹¤Î¥°¥ë¡¼¥× ID ¤òÀßÄꤹ¤ë¡£
TIOCGSID       pid_t *argp
»ØÄꤵ¤ì¤¿Ã¼Ëö¤Î¥»¥Ã¥·¥ç¥ó ID ¤ò¼èÆÀ¤¹¤ë¡£
üËö¤¬¥Þ¥¹¥¿µ¿»÷üËö¤Þ¤¿¤ÏÀ©¸æüËö¤Ç¤Ê¤¤¾ì¹ç¤Ï¡¢ENOTTY ¤Ç¼ºÇÔ¤¹¤ë¡£ ´ñ̯¤À¡£

ÇÓ¾¥â¡¼¥É

TIOCEXCL      void
üËö¤òÇÓ¾¥â¡¼¥É¤Ë¤¹¤ë¡£
üËö¤ËÂФ·¤Æ¡¢¤³¤ì°Ê¹ß¤Î open(2) Áàºî¤ò¶Ø»ß¤¹¤ë¡£ (root °Ê³°¤Î¾ì¹ç¡¢¤³¤ì°Ê¹ß¤Î open(2) ¤Ï EBUSY ¤Ç¼ºÇÔ¤¹¤ë¡£)
TIOCNXCL       void
ÇÓ¾¥â¡¼¥É¤ò̵¸ú¤Ë¤¹¤ë¡£

¥é¥¤¥óÀ©¸æ (line discipline)

TIOCGETD      int *argp
üËö¤Î¥é¥¤¥óÀ©¸æ¤Î¾ðÊó¤ò¼èÆÀ¤¹¤ë¡£
TIOCSETD       const int *argp
üËö¤Î¥é¥¤¥óÀ©¸æ¤Î¾ðÊó¤òÀßÄꤹ¤ë¡£

µ¿»÷üËö¤Î ioctl

TIOCPKT       const int *argp
¥Ñ¥±¥Ã¥È¥â¡¼¥É¤òÍ­¸ú
(*argp ¤¬ 0 °Ê³°¤Î¾ì¹ç) ¤Þ¤¿¤Ï̵¸ú¤Ë¤¹¤ë¡£ µ¿»÷üËö¤Î¥Þ¥¹¥¿Â¦¤Ë¤Î¤ßŬÍѤǤ­¤ë (¤½¤ì°Ê³°¤Î¾ì¹ç¤Ï ENOTTY ¤òÊÖ¤¹)¡£ ¥Ñ¥±¥Ã¥È¥â¡¼¥É¤Ç¤Ï¡¢¤½¤Î¸å¤Ë¼Â¹Ô¤µ¤ì¤ë read(2) ¤Ï¡¢Ãͤ¬ 0 °Ê³°¤Î 1 ¤Ä¤ÎÀ©¸æ¥Ð¥¤¥È¤ò´Þ¤à¥Ñ¥±¥Ã¥È¤«¡¢ Ãͤ¬ 0 ¤Î 1 ¥Ð¥¤¥È ('' ') ¤Ëµ¿»÷üËö¤Î¥¹¥ì¡¼¥Ö¦¤Ç½ñ¤­¹þ¤Þ¤ì¤¿ ¥Ç¡¼¥¿¤¬Â³¤¯¥Ñ¥±¥Ã¥È¤òÊÖ¤¹¡£ ºÇ½é¤Î¥Ð¥¤¥È¤¬ TIOCPKT_DATA (0) ¤Ç¤Ê¤¤¾ì¹ç¡¢ °Ê²¼¤Î¥Ó¥Ã¥È¤Î 1 ¤Ä°Ê¾å¤ò OR ¤·¤¿¤â¤Î¤Ç¤¢¤ë:

TIOCPKT_FLUSHREAD   üËö¤ÎÆɤ߹þ¤ß¥­¥å¡¼¤¬¥Õ¥é¥Ã¥·¥å (flush) ¤µ¤ì¤ë¡£

TIOCPKT_FLUSHWRITE  üËö¤Î½ñ¤­½Ð¤·¥­¥å¡¼¤¬¥Õ¥é¥Ã¥·¥å¤µ¤ì¤ë¡£

TIOCPKT_STOP        üËö¤Ø¤Î½ÐÎϤ¬Ää»ß¤µ¤ì¤ë¡£

TIOCPKT_START       üËö¤Ø¤Î½ÐÎϤ¬ºÆ³«¤µ¤ì¤ë¡£

TIOCPKT_DOSTOP      t_stopc ¤¬ `^S' ¤Ç¡¢¤«¤Ä t_startc ¤¬ `^Q' ¤Ç¤¢¤ë¡£

TIOCPKT_NOSTOP      start ʸ»ú¤È stop ʸ»ú¤¬ `^S/^Q' ¤Ç¤Ê¤¤¡£

¤³¤Î¥â¡¼¥É¤¬»È¤ï¤ì¤Æ¤¤¤ë¾ì¹ç¡¢ À©¸æ¾õÂÖ¾ðÊó¤Î¸ºß¤¬¥Þ¥¹¥¿Â¦¤«¤éÆɤ߹þ¤á¤ë¤«¤Ï¡¢ Î㳰Ū¤Ê¾ò·ï¤Ç select(2) ¤ò»È¤¦¤³¤È¤Ë¤è¤êÃΤ뤳¤È¤¬¤Ç¤­¤ë¡£

¤³¤Î¥â¡¼¥É¤Ï rlogin(1) ¤È rlogind(8) ¤Ç»È¤ï¤ì¡¢¥ê¥â¡¼¥È¥¨¥³¡¼¤Î¥ê¥â¡¼¥È¥í¥°¥¤¥ó¤È ¥í¡¼¥«¥ë¤Ç¤Î `^S/^Q' ¥Õ¥í¡¼À©¸æ¤Î¥ê¥â¡¼¥È¥í¥°¥¤¥ó¤ò¼ÂÁõ¤·¤Æ¤¤¤ë¡£

BSD ¤Î ioctl ¤Ç¤¢¤ë TIOCSTOP, TIOCSTART, TIOCUCNTL, TIOCREMOTE ¤Ï¡¢ Linux ¤Ç¤Ï¼ÂÁõ¤µ¤ì¤Æ¤¤¤Ê¤¤¡£

¥â¥Ç¥àÀ©¸æ

TIOCMGET      int *argp
¥â¥Ç¥à¥Ó¥Ã¥ÈÎó¤Î¾õÂÖ¤ò¼èÆÀ¤¹¤ë¡£
TIOCMSET       const int *argp
¥â¥Ç¥à¥Ó¥Ã¥ÈÎó¤Î¾õÂÖ¤òÀßÄꤹ¤ë¡£
TIOCMBIC       const int *argp
»ØÄꤵ¤ì¤¿¥â¥Ç¥à¥Ó¥Ã¥ÈÎó¤ò¥¯¥ê¥¢¤¹¤ë¡£
TIOCMBIS       const int *argp
»ØÄꤵ¤ì¤¿¥â¥Ç¥à¥Ó¥Ã¥ÈÎó¤òÀßÄꤹ¤ë¡£

¤³¤ì¤é¤Î 4 ¤Ä¤Î ioctl ¤Ç»È¤ï¤ì¤ë¥Ó¥Ã¥È¤Ï°Ê²¼¤ÎÄ̤ê:


TIOCM_LE        DSR (data set ready/line enable)

TIOCM_DTR       DTR (data terminal ready)

TIOCM_RTS       RTS (request to send)

TIOCM_ST        Secondary TXD (transmit)

TIOCM_SR        Secondary RXD (receive)

TIOCM_CTS       CTS (clear to send)

TIOCM_CAR       DCD (data carrier detect)

TIOCM_CD         TIOCM_CAR ¤ò»²¾È¡£

TIOCM_RNG       RNG (ring)

TIOCM_RI         TIOCM_RNG ¤ò»²¾È¡£

TIOCM_DSR       DSR (data set ready)

²óÀþ¤ò¥í¡¼¥«¥ë¤È¤·¤Æ¥Þ¡¼¥¯¤¹¤ë

TIOCGSOFTCAR  int *argp
("¥½¥Õ¥È¥¦¥§¥¢¥­¥ã¥ê¥¢¥Õ¥é¥°¤Î¼èÆÀ")
termios ¹½Â¤ÂΤΠc_cflag ¥Õ¥£¡¼¥ë¥É¤Î CLOCAL ¥Õ¥é¥°¤Î¾õÂÖ¤ò¼èÆÀ¤¹¤ë¡£
TIOCSSOFTCAR   const int *argp
("¥½¥Õ¥È¥¦¥§¥¢¥­¥ã¥ê¥¢¥Õ¥é¥°¤ÎÀßÄê")
*argp ¤¬ 0 °Ê³°¤Î¾ì¹ç¡¢termios ¹½Â¤ÂΤΠCLOCAL ¥Õ¥é¥°¤òÀßÄꤹ¤ë¡£ 0 ¤Î¾ì¹ç¤Ï¥¯¥ê¥¢¤¹¤ë¡£

¥é¥¤¥ó¤Î CLOCAL ¥Õ¥é¥°¤¬¥ª¥Õ¤Î¾ì¹ç¡¢ ¥Ï¡¼¥É¥¦¥§¥¢¥­¥ã¥ê¥¢¸¡½Ð (hardware carrier detect, DCD) ¥·¥°¥Ê¥ë¤¬½ÅÍפǤ¢¤ê¡¢ O_NONBLOCK ¥Õ¥é¥°¤¬»ØÄꤵ¤ì¤Ê¤¤¸Â¤ê¡¢ Âбþ¤¹¤ëüËö¤Î open(2) ¤Ï DCD ¤¬¼¨¤µ¤ì¤ë¤Þ¤Ç¥Ö¥í¥Ã¥¯¤µ¤ì¤ë¡£ CLOCAL ¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¡¢ ¥é¥¤¥ó¤Ï¾ï¤Ë DCD ¤¬¼¨¤µ¤ì¤Æ¤¤¤ë¤«¤Î¤è¤¦¤ËÆ°ºî¤¹¤ë¡£ ¥½¥Õ¥È¥¦¥§¥¢¥­¥ã¥ê¥¢¥Õ¥é¥°¤Ï¡¢¥í¡¼¥«¥ë¥Ç¥Ð¥¤¥¹¤Ç¤ÏÄ̾ï¤Ï¥ª¥ó¤Ë¤Ê¤Ã¤Æ¤ª¤ê¡¢ ¥â¥Ç¥à¤Î¥é¥¤¥ó¤Ç¤Ï¥ª¥Õ¤Ë¤Ê¤Ã¤Æ¤¤¤ë¡£

Linux ¸ÇÍ­¤Î ioctl

TIOCLINUX ioctl ¤Ë¤Ä¤¤¤Æ¤Ï¡¢ console_ioctl(4) ¤ò»²¾È¤¹¤ë¤³¤È¡£

¥«¡¼¥Í¥ë¥Ç¥Ð¥Ã¥®¥ó¥°

#include <linux/tty.h>

TIOCTTYGSTRUCT      struct tty_struct *argp
fd ¤ËÂбþ¤¹¤ë tty_struct ¤ò¼èÆÀ¤¹¤ë¡£

ÊÖ¤êÃÍ

ioctl() ¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï¡¢À®¸ù¤·¤¿¾ì¹ç¤Ï 0 ¤òÊÖ¤¹¡£ ¥¨¥é¡¼¤Î¾ì¹ç¤Ï -1 ¤òÊÖ¤·¡¢ errno ¤òŬÀÚ¤ËÀßÄꤹ¤ë¡£

¥¨¥é¡¼

ENOIOCTLCMD
ÉÔÌÀ¤Ê¥³¥Þ¥ó¥É¤Ç¤¢¤ë¡£
EINVAL
ÉÔÀµ¤Ê¥³¥Þ¥ó¥É°ú¤­¿ô¤Ç¤¢¤ë¡£
EPERM
¸¢¸Â¤¬ÉÔ­¤·¤Æ¤¤¤ë¡£
ENOTTY
fd ¤¬ÉÔŬÀڤǤ¢¤ë¡£

Îã

¥·¥ê¥¢¥ë¥Ý¡¼¥È¤Î DTR ¤Î¾õÂÖ¤ò¥Á¥§¥Ã¥¯¤¹¤ë¡£

#include <termios.h>

#include <fcntl.h>

#include <sys/ioctl.h>



int

main(void)

{

    int fd, serial;



    fd = open("/dev/ttyS0", O_RDONLY);

    ioctl(fd, TIOCMGET, &serial);

    if (serial & TIOCM_DTR)

        puts("TIOCM_DTR ¤¬ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¡£");

    else

        puts("TIOCM_DTR ¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¡£");

    close(fd);

}

´ØÏ¢¹àÌÜ

ioctl(2), termios(3), console_ioctl(4), pty(7)