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创建文件

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无法输入汉字.

回答:

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

至于原因,我不清楚.

以上是 Linux下C程序通过system调用stty命令导致程序运行完毕后VIM故障 的全部内容, 来源链接: utcz.com/p/194743.html

回到顶部