应该在哪里实施TIOCMGET?

时间:2013-02-12 10:48:21

标签: linux mono ioctl

this问题之后,这只是为了满足我的好奇心。虽然我现在正在使用替代解决方案,但最初的问题似乎归结为TIOCMGET没有实现,我想知道为什么会这样。

可悲的是,我没有通过谷歌搜索找到太多有用的信息,而且我发现tty_ioctl手册页(第一个结果)非常难以理解。

那么,TOCMGET究竟是什么,它在哪里实施,哪里可能单声道寻找它而未能找到它?

1 个答案:

答案 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调制解调器驱动程序,但普通终端不会这样做,因为它们不是调制解调器。