显示linux系统的tcgetattr函数源码
时间: 2023-11-28 19:03:38 浏览: 139
`tcgetattr` 是一个系统调用函数,其源码实现位于内核中。下面是 `tcgetattr` 函数的源码:
```c
int tcgetattr(int fd, struct termios *termios_p)
{
struct tty_struct *tty;
int ret = 0;
tty = get_current_tty();
if (!tty)
return -ENXIO;
mutex_lock(&tty->termios_mutex);
if (fd != tty->driver->ttynr) {
ret = -EINVAL;
goto out_unlock;
}
ret = tty_termios_copy_hw(tty, termios_p);
if (ret)
goto out_unlock;
ret = tty_termios_copy_ld(tty, termios_p);
if (ret)
goto out_unlock;
out_unlock:
mutex_unlock(&tty->termios_mutex);
return ret;
}
```
该函数接受两个参数:一个文件描述符 `fd` 和一个指向 `termios` 结构的指针 `termios_p`。
`tcgetattr` 在内部调用 `get_current_tty` 函数,获取当前进程所连接的 tty 设备,并使用 `tty->driver->ttynr` 检查传递的文件描述符是否与该 tty 设备的文件描述符相匹配。如果不匹配,则返回 `-EINVAL` 错误码。
如果文件描述符匹配,`tcgetattr` 将调用 `tty_termios_copy_hw` 和 `tty_termios_copy_ld` 函数来将 tty 的硬件和软件参数复制到 `termios_p` 结构中。如果复制失败,`tcgetattr` 将返回相应的错误码。
最后,`tcgetattr` 函数将释放 tty 设备的 termios 互斥锁,并返回执行结果。
阅读全文