美文网首页
[终端]修改字符输入输出方式

[终端]修改字符输入输出方式

作者: 道无显隐 | 来源:发表于2017-02-26 21:51 被阅读0次

问题:希望每输入一个字符,终端就能得到,而不需要输入CR或者LF字符。一开始觉得需要设置标准输入为无缓冲模式,但是我使用的是read函数,总之没有成功。然后我把read设置成非阻塞,依然没用。然后我找到了下面的方法:
《Linux高级程序设计》
默认方式下,所有的输入字符都将缓冲在一个buffer空间中,直到用户输入CR或者LF字符才发送。输入内容的回显由本端完成,即用户输入一个字符,该字符直接回显。选用默认方式的代码段如下:

options.c_lflag |=(ICANON|ECHO|ECHOE);

如果想设置成每输入一个字符都将立即被发送到服务器,并且不在终端上回显,则需要设置成

options.c_lflag &=~(ICANON|ECHO|ECHOE);

示例:

#include <termios.h>
void setTerm(void){
   struct termios option;
   tcgetattr(0,&option);
   option.c_lflag &=~(ICANON|ECHO|ECHOE);
   tcsetattr(0,TCSANOW,&option);
 }

恢复成默认状态

#include <termios.h>
 void recoverTerm(void){
   struct termios option;
   tcgetattr(0,&option);
   option.c_lflag |=(ICANON|ECHO|ECHOE);
   tcsetattr(0,TCSANOW,&option);
 }

其中struct termios是管理终端属性的结构体。

猜测不成功的原因是终端没有发送收到的字符,所以不管read是否阻塞,都不会有数据读入。
问题:从《Linux高级程序设计》中可以看出,终端肯定是有缓冲的。而标准输入输出流也是有缓冲的,那么标准输入输入重定向到一个终端的时候,那么两者的缓冲是什么关系呢?重定向到文件呢?

相关文章

  • [终端]修改字符输入输出方式

    问题:希望每输入一个字符,终端就能得到,而不需要输入CR或者LF字符。一开始觉得需要设置标准输入为无缓冲模式,但是...

  • 第四章-最简单的C程序设计一一顺序程序设计

    一、字符数据的输入输出。 1、putchar()函数:(字符输出函数)向终端输出一个字符。 形式:putchar(...

  • 输入输出

    本章会介绍Forth在终端,硬盘的输入输出处理。 我们将会讨论硬盘访问 输出操作 字符串操作 输入操作 字符串输入...

  • c++字符串

    字符串创建 字符串输入输出 可以在输入输出语句中用字符串变量名,输入输出字符串,如: 注意:多个用空格隔开的字符串...

  • Python学习笔记(一)

    基础知识 字符串 .py 文件申明方式 输入输出 print()、input(),注意input()返回 str ...

  • 笔试算法汇总

    已完成部分:背包问题、排序、堆 下面分别介绍上面的算法。 输入输出 在编程题中,经常需要程序具有接收从终端输入字符...

  • Java IO

    面向字符的输入输出流 面向字节的输入输出流 小测试 压缩

  • Java_IO_基础

    字节输入输出流InputStream/OutputStream、与字符输入输出流Reader/Write Inpu...

  • IO基础

    Java对输入输出上的控制分为字节流和字符流;之所以会有字符流是因为,程序中的字符所用的编码方式可能不一样,为适应...

  • Mac终端常用命令(后续分类)

    一、终端 1、通过命令行快速查找当前目录下存在某字符串的文件: 2、终端显示行号和tab自动空格,修改vimrc配...

网友评论

      本文标题:[终端]修改字符输入输出方式

      本文链接:https://www.haomeiwen.com/subject/ohlawttx.html