gpt4 book ai didi

c - 使用系统调用后重置(stty raw)

转载 作者:太空宇宙 更新时间:2023-11-04 03:22:50 37 4
gpt4 key购买 nike

我使用下面的代码来读取和输出每个击键,而不必每次都按回车键。

system("\bin\stty raw");

在我读完之后,程序立即执行另一个系统调用来重置终端行为。

system("\bin\stty cooked");

问题是,最后一行没有按应有的方式重置终端行为。一旦该程序终止,一切都会变得一团糟。它继续读取输入,并且在按下 enter 或 CTRL C 或其他任何内容后不执行任何操作。

如何将终端行为重置为最初的行为?

最佳答案

使用popen()pclose() 运行"/bin/stty -g"。读取 stty -g] 的输出并保存以备后用。

当你想重置终端时,使用"/bin/stty the-string-from-stty-g"

机制很繁琐但可行。

stty-g 选项的全部意义在于提供一个可以传回 stty 以恢复当前设置的字符串。然后,您可以运行 stty raw,确保在使用 stty -g 中的字符串退出之前重置终端。

还要注意,stty sane 可以很好地将异常终端重置为已知状态。您可能需要在终端命令行运行:Control-Jstty saneControl-J 以使其工作。

您也可以在不运行外部程序的情况下执行此操作。您需要查看 tcgetattr()tcsetattr() 及相关函数。同样,您读取当前设置(tcgetattr() 等),更改它们的副本并将其设置为新值,并确保在退出时重置原始设置(可能使用 atexit() ? ).

关于c - 使用系统调用后重置(stty raw),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43857021/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com