2013-02-12 1 views
0

Ceci est vraiment juste pour satisfaire ma curiosité après this question. Bien que j'utilise maintenant une solution alternative, le problème original semble venir du fait que TIOCMGET n'est pas implémenté, et j'aimerais savoir pourquoi. Malheureusement, je n'ai pas trouvé beaucoup d'informations utiles juste en recherchant sur Google, et je trouve la page man tty_ioctl (le premier résultat) assez impénétrable. Alors, qu'est-ce que TOCMGET exactement, où est-il implémenté, et où pourrait-on le rechercher et ne pas le trouver?Où TIOCMGET est-il supposé être implémenté?

+0

La page de manuel implique qu'elle est implémentée, au moins au niveau C. –

Répondre

1

Il est implémenté dans drivers/tty/tty_io.c qui a la mise en œuvre suivante:

/** 
*  tty_tiocmget   -  get modem status 
*  @tty: tty device 
*  @file: user file pointer 
*  @p: pointer to result 
* 
*  Obtain the modem status bits from the tty driver if the feature 
*  is supported. Return -EINVAL if it is not available. 
* 
*  Locking: none (up to the driver) 
*/ 

static int tty_tiocmget(struct tty_struct *tty, int __user *p) 
{ 
     int retval = -EINVAL; 

     if (tty->ops->tiocmget) { 
       retval = tty->ops->tiocmget(tty); 

       if (retval >= 0) 
         retval = put_user(retval, p); 
     } 
     return retval; 
} 

Comme vous le constaterez dans le commentaire, et le code, il ne fonctionne que si le pilote de terminal sous-jacent supporte et autrement revenir EINVAL.

Il existe un certain nombre de pilotes qui le prennent en charge, tels que isdn4linux et divers pilotes de modem GSM, mais les terminaux ordinaires ne le feront pas car ils ne sont pas des modems.

Questions connexes