assembly - 更改汇编中用户输入的行尾字符

标签 assembly nasm system-calls

我正在用 nasm 编写一个计算器程序,我想读取用户输入,直到用户输入=。换句话说,我不希望用户按 Enter 键来结束输入行。是否有任何特殊的系统调用或其他东西?

最佳答案

假设您正在谈论用于从 Unix TTY 读取输入的 Linux 或 OS X 系统调用,通常的方法是使用 ioctl 将 TTY 置于原始模式,这样您就可以看到每个字符的键入情况,无需进行行编辑。

但您也可以设置 TTY 的 eol(行尾)字符。例如从命令行,

stty eol =

您可以使用cat对其进行测试,并看到=(以及换行符)将缓冲的文本提交到内核,以便cat看到它并打印它。

使用strace查看stty使用什么系统调用来执行此操作。它是 ioctl(0, TCGETS, { stuf ...}) = 0

(stty sane 和/或 reset shell 命令将在使用完内容后将您的终端设置重置回正常状态。)

关于assembly - 更改汇编中用户输入的行尾字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51175247/

相关文章:

c - VC++ 2010 中的内联汇编错误

c - 为什么操作系统的某些部分必须用汇编编写?

c - 从 `data.in` 读取并在 C 中写入 `data.out` 时出现问题

linux-kernel - is system(const char *command) 导致 cpu sys 100%

architecture - 叶说明(处理器/程序集)

linux - 从汇编文件中读取

linux - float 显示十六进制 x86-64 nasm linux

windows - NASM + GoLink : "The following symbol was not defined in the object file or files"

c - Nice() 库调用还是系统调用?

assembly - 重定位被截断以适应 r_386_8 针对 .bss'