zoukankan      html  css  js  c++  java
  • UNIXLINUX编程实践教程>第五章>实例代码注解>setecho.c

    一 问题

      设置回显位的状态,命令行参数为y则开启,否则关闭。

    二 分析

      标准输入的文件描述符为0.
      使用tcgetattr()函数和termios结构体可获得标准输入的属性。
      使用tcsetattr()函数和termios结构体可以将更改后的属性设置重新写回标准输入。

    三 实现

    #include <stdio.h>
    #include <termios.h>
    
    #define oops(s,x) {perror(s);exit(x)};
    
    main(int ac,char *av[])
    {
        struct termios info;
        /*必须带有参数*/
        if(ac == 1)
        {
            exit(0);
        }
        /*读取设备属性*/
        if(tcgetattr(0,&info) == -1)
        {
            oops("tcgettattr",1);
        }
        /*命令行第一个参数的第一个字母为y,则开启回显,否则关闭*/
        if(av[1][0] == 'y')
        {
            info.c_lflag |= ECHO;
        }
        else
        {
            info.c_lflag &= ~ECHO;
        }
        /*将修改后的参数写回设备*/
        if(tcsetattr(0,TCSANOW,&info) == 1)
        {
            oops("tcsetattr",2);
        }
    }

    四 相关函数及结构体

    1 tcgetattr() 函数
    读取tty驱动程序的属性
    头文件:#include <termios.h>  #include <unistd.h>
    函数原型: int tcgetattr(int fd,struct termios *info)
    参数:  fd    与终端相关联的文件描述符
           info   指向终端结构的指针
    返回值: -1    遇到错误
         0     成功返回

    2 tcsetattr()函数
    设置tty驱动程序的属性
    头文件:#include <termios.h>  #include <unistd.h>
    函数原型:int tcsetattr(int fd,int when,struct termios *info);
    参数:  fd    与终端相关联的文件描述符
         when  改变设置的时间(TCSANOW 立即;
                       TCSADRAIN 等待驱动程序队列中所有输出都被传送到终端
                       TCSAFLUSH 等待驱动队列中所有输出都备传送出去,然后释放所有队列中的输入数据)
         info   指向终端结构的指针
    返回值: -1    遇到错误
         0     成功返回

    3 termios结构体
    struct termios
    {
      tcflag_t c_iflag;  /*input mode flags*/
      tcflag_t c_oflag;  /*output mode flags*/
      tcflag_t c_cflag;  /*control mode flags*/
      tcflag_t c_lflag;  /*local mode flags*/
      cc_t c_c[NCCS];  /*control characters*/
      speed_t c_ispeed;  /*input speed*/
      speed_t c_ospeed;  /*output speed*/
    }

  • 相关阅读:
    ArcMAP操作 获取点所在栅格的高程值
    AE代码 积累
    AE 判断点是否在面内
    ArcMAP获取要素的外包多边形
    DEM消除平三角形教程
    博文目录
    Redis哨兵集群部署
    引用-各类数据库整体架构图汇总
    百度数仓Palo-Doris并发压测性能
    引用-Phoenix介绍
  • 原文地址:https://www.cnblogs.com/cation/p/2945464.html
Copyright © 2011-2022 走看看