Linux下C程序通过system调用stty命令导致程序运行完毕后VIM故障

发布于 09-12 00:25 字数 1617 浏览 23 评论 0

萌新想在linux下用C写一个贪吃蛇,需要实现用户输入不需按回车,输入的内容 不显示.于是写了两个.c文件一起编译

#include <stdlib.h>
void noenternoecho(void)   //用户输入不需要按下回车,没有显示
{
system("stty raw");          //用户不需要输入回车,system()用来执行shell命令
system("stty -echo");        //不显示输入内容
}
void enterandecho(void)      //用户输入需要按下回车,有显示
{
system("stty -raw");         //据猜测取消system("stty raw")
system("stty echo");         //据猜测取消system("stty -echo")
}
//需要注意的是,一旦使用了noenternoecho(),/n将无法回车换行,/n将仅仅换行而不回车,/r/n才是回车换行

test.c

#include <stdio.h>
void noenternoecho(void); //用户输入不需要按下回车,没有显
示
void enterandecho(void);  //用户输入需要按下回车,有显示
int main(void)
{
char ch;
noenternoecho();     //关闭回显,输入不需按回车
printf("输入\r\n");
ch=getchar();
printf("输入了%c\r\n",ch);
enterandecho();        //开启回显,输入需要回车
return 0;
}

这2个C文件一起编译运行没有任何问题,问题是执行完./a.out后去
启动VIM编辑一个文件,VIM将会故障,无法输入汉字,还会有很多意料之外的事件发生
运行./a.out后,使用vi创建文件

M%)DPTZ~U)KP0)Q%JW_}1RR.png

在VIM里尝试输入汉字

{C4F5A)0)B99Y3GNQD]WKS8.png

汉字无法输入,变成不知道是什么含义的内容

OSJ55~MB}7JFXYcodeA\]}B/code1A5.png

有时候输入汉字会突然跳到底行模式
有时候会莫名其妙的关闭vi,
最奇怪的是有时候vi会生成2进制文件.
也就是说,每一次运行./a.out 我的VIM将变得十分离奇,无法输入汉字,如果强行输入汉字会发生不可预料的事情,汉字有可能变成未知的奇怪的东西.
可能突然跑到底行模式
可能突然退出VIM
可能生成2进制文件
可能在VIM里使用什么编辑命令

目前只发现运行./a.out会导致VIM故障,终端貌似没问题,终端里可以输入汉字
关闭终端,重新打开,VIM恢复正常

我知道我的功能可以用更好的方法实现,我不关心这个,只关心为什么我的程序会致使我的VIM无法输入汉字.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夏雨凉2022-09-19 00:25:46

OK我找到问题了
就是stty -raw
在终端运行这个命令
会直接导致VIM输入汉字出现故障

至于原因,我不清楚.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文