在this问题之后,这只是为了满足我的好奇心。虽然我现在正在使用替代解决方案,但最初的问题似乎归结为TIOCMGET没有实现,我想知道为什么会这样。
可悲的是,我没有通过谷歌搜索找到太多有用的信息,而且我发现tty_ioctl手册页(第一个结果)非常难以理解。
那么,TOCMGET究竟是什么,它在哪里实施,哪里可能单声道寻找它而未能找到它?
答案 0 :(得分:1)
它在drivers/tty/tty_io.c
中实现,具有以下实现:
/**
* 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;
}
正如您将从注释和代码中注意到的,它仅在底层终端驱动程序支持它时才有效,否则将返回EINVAL
。
有许多驱动程序支持它,例如isdn4linux
和各种GSM调制解调器驱动程序,但普通终端不会这样做,因为它们不是调制解调器。