当前位置: 技术问答>linux和unix
怎么从curses模式切换到字符模式?
来源: 互联网 发布时间:2017-03-11
本文导语: 我有一个程序做一个登陆界面,用的curses,登陆完了以后,想反回字符模式,但是怎么也回不去,用printf输出来的东西不知道跑哪去了,等程序执行完了,才显示出来求大神指教,怎么也解决不了,用endwin也不行!!...
我有一个程序做一个登陆界面,用的curses,登陆完了以后,想反回字符模式,但是怎么也回不去,用printf输出来的东西不知道跑哪去了,等程序执行完了,才显示出来求大神指教,怎么也解决不了,用endwin也不行!!跪求大神解答
|
恩,还有一个问题endwin()需要放在box()之后
initscr();
box(stdscr,'*','*'); // 估计该函数重新调用了initscr()
endwin();
echo();
refresh();
getch();
printf("sjdgdn");
getchar();
这样写代码是基本没有问题的。但是box()函数修改了终端环境的设置,因此,退出来时不一定能够正常的shell状态。这个需要LZ去学习终端环境编程相关的东西,不是一两句可以说得清的。
initscr();
box(stdscr,'*','*'); // 估计该函数重新调用了initscr()
endwin();
echo();
refresh();
getch();
printf("sjdgdn");
getchar();
这样写代码是基本没有问题的。但是box()函数修改了终端环境的设置,因此,退出来时不一定能够正常的shell状态。这个需要LZ去学习终端环境编程相关的东西,不是一两句可以说得清的。
|
这样说来可以参考5、7楼的回复,stty -a看终端设置时,注意一下echo相关的项目,这个是和字符显示相关的。
贴一下我的结果仅供楼主参考:
speed 38400 baud; rows 38; columns 129; line = 0;
intr = ^C; quit = ^; erase = ^?; kill = ^U; eof = ^D; eol = ; eol2 = ; swtch = ; start = ^Q; stop = ^S;
susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
|
就是用endwin()
可能还需要一些你之前的初始化屏幕时的相反操作比如:
echo();
clear();
endwin();
nl();
可能还需要一些你之前的初始化屏幕时的相反操作比如:
echo();
clear();
endwin();
nl();
|
你要把endwin()放在最后啊。
那的看看endwin()的具体功能,看它到底做了什么。
printf不是输出原因是,你没有加“n”,那么在行缓冲的模式下,只有接收到换行符才会输出。
楼主可以搜“行缓冲,全缓冲,无缓冲”的概念。
那的看看endwin()的具体功能,看它到底做了什么。
printf不是输出原因是,你没有加“n”,那么在行缓冲的模式下,只有接收到换行符才会输出。
楼主可以搜“行缓冲,全缓冲,无缓冲”的概念。