热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

UnderstandingUnix/LinuxProgramming-终端控制和信号

软件工具:从文件或者stdin读取数据写到stdout对磁盘文件和设备文件不加区分的程序称为软件工具。软件工具从标准输入读取字节,进行一些处理,然后将包含结果的字节流写到标准输出。工
软件工具:从文件或者stdin读取数据写到stdout
  对磁盘文件和设备文件不加区分的程序称为软件工具。软件工具从标准输入读取字节,进行一些处理,然后将包含结果的字节流写到标准输出。工具发送错误消息到标准错误输出,它们也被当作简单的字节流来处理。这些文件的描述符能够连接到文件、终端、鼠标、光电管等等。工具对所处理的数据的源和目的不做任何假设。其它很多程序也能从命令行所指定的文件中读取数据。
  事实上,大多数进程自动将前三个文件描述符打开,即连接到stdin,stdout以及stderror,它们不需要调用open来与这三个文件建立连接。而软件工具的输入和输出能够被 重定向到任何类型的连接上。 特定设备程序:为特定应用控制设备  其它程序,如控制扫描仪、记录压缩盘、操作磁盘驱动程序和拍摄数码相片的程序也能同特定设备进行交互。书中通过终端与人交互的程序来探讨写这些程序时用到的概念和技术。将这些面向终端的程序称为用户程序。 用户程序
用户程序的例子:vi,emacs等等。这些程序设置终端驱动程序的击键和输出处理方式。驱动程序有许多设置,但是用户常用到的有
  1. 立即响应的击键事件
  2. 有限的输入集
  3. 输入的超时
  4. 屏蔽Ctrl-C

终端驱动程序的模式:

  先通过简短的转换程序来深入理解设备驱动程序的细节:

 

 1 /* rotate.c
 2  * purpose:useful for showing tty modes
 3  * map a->b , b->c , ... , y->z ;
 4  */
 5  
 6  #include 
 7  #include 
 8  #include 
 9  
10  int main()
11  {
12      int c ;
13      while( ( c = getchar()) != EOF )
14      {
15          if(c == 'z')
16          {
17              c = 'a';
18          }
19          else if( islower(c))
20          {
21              c++ ;
22          }
23          putchar(c) ;
24      }
25      return 0 ;
26  }

  使用tr命令能够达到同样的效果,但是tr的GNU版本具有输入缓冲,以上是一个不带缓冲的具体例子。这个程序中,rotate程序是和终端驱动器交换数据的,而终端驱动器从键盘输入数据并且从屏幕输出数据。

规范模式:缓冲和编辑

  使用默认设置运行这个程序,我们发现,缓冲、编辑、回显和控制键的处理都由终端驱动程序完成了。缓冲和编辑包含规范处理,当这些特征被启动,终端连接被成为处于规范模式。

非规范处理:

  如果使用“stty -icanon”关闭了终端驱动程序的规范模式处理,则上述程序的处理方式被改变了。

  特别地,非规范模式没有缓冲,输入一个字符就会立即被送到程序rotate处理并且立即回显。

  终端模式小结:

  1. 规范模式
    也成为cooked模式,是用户常见模式。驱动程序输入的字符保存在缓冲区,在接收回车键时才将这些缓冲数据发送到程序。缓冲的数据可以实现最基本的编辑、删除功能。
  2. 非规范模式当缓冲和编辑功能被关闭时,连接被成为非规范模式。终端处理器仍进行特定的字符处理。如果使用此模式,并且希望用户能够编辑输入,需要在用户程序中实现编辑功能。
  3. raw模式每个处理步骤都被一个独立的位控制。例如,ISIG的位控制Ctrl-C是否用于终止一个程序。
    当所有处理都被关闭之后,驱动程序直接将输入传递给程序。在这种情况下,驱动程序被成为raw模式。

推荐阅读
  • [Offer收割]编程竞赛第8轮 A 小Ho的完美主义倾向
    题目链接:小Ho的完美主义倾向题目描述:小Ho在一条直线型的街道上漫步。这条街道由若干块长度为L的石板铺设而成,因此每隔L的距离就会出现一道石板间的接缝。小Ho对这些规律排列的接缝产生了浓厚的兴趣,他决定研究如何在这条街道上行走,以满足自己对完美路径的追求。本题要求在给定的约束条件下,计算出小Ho能够实现其目标的所有可能方案数。 ... [详细]
  • 本文详细探讨了OpenCV中人脸检测算法的实现原理与代码结构。通过分析核心函数和关键步骤,揭示了OpenCV如何高效地进行人脸检测。文章不仅提供了代码示例,还深入解释了算法背后的数学模型和优化技巧,为开发者提供了全面的理解和实用的参考。 ... [详细]
  • 【并发编程】全面解析 Java 内存模型,一篇文章带你彻底掌握
    本文深入解析了 Java 内存模型(JMM),从基础概念到高级特性进行全面讲解,帮助读者彻底掌握 JMM 的核心原理和应用技巧。通过详细分析内存可见性、原子性和有序性等问题,结合实际代码示例,使开发者能够更好地理解和优化多线程并发程序。 ... [详细]
  • BZOJ4240 Gym 102082G:贪心算法与树状数组的综合应用
    BZOJ4240 Gym 102082G 题目 "有趣的家庭菜园" 结合了贪心算法和树状数组的应用,旨在解决在有限时间和内存限制下高效处理复杂数据结构的问题。通过巧妙地运用贪心策略和树状数组,该题目能够在 10 秒的时间限制和 256MB 的内存限制内,有效处理大量输入数据,实现高性能的解决方案。提交次数为 756 次,成功解决次数为 349 次,体现了该题目的挑战性和实际应用价值。 ... [详细]
  • 在使用 PHP 通过 SSL 安全连接到 MySQLi 数据库服务器时,遇到了一些技术难题。我的环境包括一个 Web 服务器和一个数据库服务器,两者均使用 OpenSSL 生成了证书。尽管证书内容一致,但在尝试从 Web 服务器使用 `mysql` 命令进行连接时,仍然遇到了问题。为了确保连接的安全性和稳定性,需要进一步检查证书配置和 PHP 的 SSL 设置,以排除潜在的配置错误或兼容性问题。 ... [详细]
  • 在IIS环境中部署Go API应用:Golang面试指南
    这篇文章介绍了在IIS上部署Go API项目的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着 ... [详细]
  • mybatis 逆向生成后遵循java驼峰法则的解决
    这篇文章主要介绍了mybatis逆向生成后遵循java驼峰法则的解决,具有很好的参考价值,希望对大家有所帮助。一 ... [详细]
  • 套路题?感觉讲不清,先写建图把每个点拆成两个,A和B,S-Ai流量1费用0,Bi-T流量1费用0ÿ ... [详细]
  • GDB 使用心得与技巧总结
    在使用 GDB 进行调试时,可以采用以下技巧提升效率:1. 通过设置 `set print pretty on` 来美化打印输出,使数据结构更加易读;2. 掌握常见数据结构的打印方法,如链表、树等;3. 利用 `info locals` 命令查看当前作用域内的所有局部变量;4. 在需要进行类型强制转换时,正确使用语法,例如 `p (Test::A *) pObj`。这些技巧能够显著提高调试的便捷性和准确性。 ... [详细]
  • 利用Java开发功能完备的电话簿应用程序,支持添加、查询与删除操作
    本研究基于Java语言开发了一款功能全面的电话簿应用程序,实现了与数据库的高效连接。该应用不仅支持添加、查询和删除联系人信息,还具备输出最大和最小ID号的功能,并能够对用户输入的ID号进行有效性验证,确保数据的准确性和完整性。详细实现方法可参阅相关文档。 ... [详细]
  • Understanding the Distinction Between decodeURIComponent and Its Encoding Counterpart
    本文探讨了 JavaScript 中 `decodeURIComponent` 和其编码对应函数之间的区别。通过详细分析这两个函数的功能和应用场景,帮助开发者更好地理解和使用它们,避免常见的编码和解码错误。 ... [详细]
  • [TyvjP1050] 动态规划求解最长公共子序列问题
    在解决最长公共子序列问题时,动态规划是一种高效的方法。具体而言,我们使用二维数组 `dp[i][j]` 来表示第一个字符串匹配到第 `i` 位,第二个字符串匹配到第 `j` 位时的最长公共子序列长度。状态转移方程为:当两个字符相等时,`dp[i][j] = dp[i-1][j-1] + 1`;否则,`dp[i][j] = max(dp[i-1][j], dp[i][j-1])`。通过这种方法,我们可以有效地计算出两个字符串的最长公共子序列。 ... [详细]
  • 在进行网络编程时,准确获取本地主机的IP地址是一项基本但重要的任务。Winsock作为20世纪90年代初由Microsoft与多家公司共同制定的Windows平台网络编程接口,为开发者提供了一套高效且易用的工具。通过Winsock,开发者可以轻松实现网络通信功能,并准确获取本地主机的IP地址,从而确保应用程序在网络环境中的稳定运行。此外,了解Winsock的工作原理及其API函数的使用方法,有助于提高开发效率和代码质量。 ... [详细]
  • 题意:求一个N个点无向图中,其中p个关键点间的最短距离.分析:比较特殊的最短路,方式类似于多源BFS,将所有关键点装入优先队列,状态中需要包含其源点的id.对每条边都要遍历,对每个 ... [详细]
  • 练习使用DFS搜索12以内的五位数字的排列例如12345123461211109712111098利用数学排列与组合方法可知结果为12 ... [详细]
author-avatar
_Terr1鄭x宜_F
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有