• 终端I/O之获得和设置终端属性


    使用函数tcgetattr和tcsetattr可以获得或设置termios结构。这样也可以检测和修改各种终端选择标志和特殊字符,以使终端按我们所希望的方式进程操作。

    #include <termios.h>

    int tcgetattr(int filedes, struct termios *termptr);

    int tcsetattr(int filedes, int opt, const struct termios *termptr);

    两个函数的返回值:若成功则返回0,若出错则返回-1

    这两个函数都有一个指向termios结构的指针作为其参数,它们返回当前终端的属性,或者设置该终端的属性。因为这两个函数只对终端设备进行操作,所以若filedes并不引用一个终端设备则出错返回-1,errno设置为ENOTTY。

    tcsetattr的参数opt是我们可以指定在什么时候新的终端属性才起作用。opt可以指定为下列常量中的一个:

    TCSANOW 更改立即发生。

    TCSADRAIN 发送了所有输出后更改才发生。若更改输出参数则应该使用此选项。

    TCSAFLUSH 发送了所有输出后更改才发生。更进一步,在更改发生时未读的所有输入数据都被删除(刷清)。

    tcsetattr函数的返回值易产生混淆。如果它执行了任意一种所要求的动作,即使未能执行所有要求的动作,它也返回0(表示成功)。如果该函数返回0,则我们有责任检查该函数是否执行了所有要求的动作。这就意味着,在调用tcsetattr设置所希望的属性后,需调用tcgetattr,然后将实际终端属性与所希望的属性相比较,以检测两者是否有区别。

  • 相关阅读:
    关于拷贝构造函数和赋值运算符
    笔试题(转)
    Pro *C/C++学习笔记(一)
    __cdecl
    Visual Studio 2010中C++的四大变化(转)
    小小递归函数的执行过程
    stl string常用函数
    【C/C++ string】之strcpy函数
    409 Excuses, Excuses!
    10878 Decode the tape
  • 原文地址:https://www.cnblogs.com/nufangrensheng/p/3576682.html
Copyright © 2020-2023  润新知