Linux下C程序通过system调用stty命令导致程序运行完毕后VIM故障
萌新想在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创建文件
在VIM里尝试输入汉字
汉字无法输入,变成不知道是什么含义的内容
有时候输入汉字会突然跳到底行模式
有时候会莫名其妙的关闭vi,
最奇怪的是有时候vi会生成2进制文件.
也就是说,每一次运行./a.out 我的VIM将变得十分离奇,无法输入汉字,如果强行输入汉字会发生不可预料的事情,汉字有可能变成未知的奇怪的东西.
可能突然跑到底行模式
可能突然退出VIM
可能生成2进制文件
可能在VIM里使用什么编辑命令
目前只发现运行./a.out会导致VIM故障,终端貌似没问题,终端里可以输入汉字
关闭终端,重新打开,VIM恢复正常
我知道我的功能可以用更好的方法实现,我不关心这个,只关心为什么我的程序会致使我的VIM无法输入汉字.
OK我找到问题了
就是stty -raw
在终端运行这个命令
会直接导致VIM输入汉字出现故障
至于原因,我不清楚.