linux 如何在终端中一行内显示信息
本帖最后由 jazeltq 于 2011-09-21 10:03 编辑现在想实现这样的功能,就是在终端中打印一行后,这一行的内容消失,
下一行第一行的位置打印,然后在消失。
如果想实现这样的功能,该如何实现,有思路就行,谢谢 回复 1# jazeltq
看看 termios(3). 学习了 termios(3).
这个我看两, 但是不太明白, 跟我到这个实现有什么关系,
我看到有vkill这个字符, 你到意思是说我在printf之后, 下次printf之前得输入这个字符吗?
还是其它意思? termios(3).
这个我看两, 但是不太明白, 跟我到这个实现有什么关系,
jazeltq 发表于 2011-09-18 21:48 http://bbs.chinaunix.net/images/common/back.gif
如果你只是想要個簡單的類似進度條的效果,那麼用 printf(3) 就可以了,更複雜的效果就需要 termios(3) 提供的功能了。
#include <stdio.h>
#include <string.h>
#include <time.h>
int
main(void)
{
int i;
char pbar;
struct timespec interval;
interval.tv_sec = 0;
interval.tv_nsec = 10000000L;
memset(pbar, ' ', sizeof(pbar));
pbar = '\0';
for (i = 1; i <= 100; i++) {
pbar = '=';
pbar = '>';
printf("%2d%% [%s]\r", i, pbar+1);
fflush(stdout);
nanosleep(&interval, NULL);
}
printf("\n");
return 0;
}
谢谢 ls 这为兄弟, 我想实现的功能比进度条复杂些
printf(" Reading file .... %d(out of %d)", read_file_num++, total_file_num);
就让这行信息, 一直在一行显示,不刷屏,
不知道我说清楚我的想法了没有? 另外, 你说的termios 也实验过,
vkill = \035默认的删除本行的特殊字符, 我想的是 在打完一行之后, 通过printf把vkill特殊字符写入
测试程序思路是这样的
printf("file %d", file_num++);
printf("\035");
但是的结果显示的输出还是会刷屏, 是我思路有问题吗?
谢谢 ls 这为兄弟, 我想实现的功能比进度条复杂些
printf(" Reading file .... %d(out of %d)", read_file_num++, total_file_num);
就让这行信息, 一直在一行显示,不刷屏,
jazeltq 发表于 2011-09-19 11:27 http://bbs.chinaunix.net/images/common/back.gif
我上面的代码实现的就是这个功能啊,你运行过它么? 我上面的代码实现的就是这个功能啊,你运行过它么?
MMMIX 发表于 2011-09-19 12:11 http://bbs.chinaunix.net/images/common/back.gif
仁兄,我运行你写的这个程序了, 的确不是我想要的功能
我想只在一行内打印进度信息,打印完一条,就擦除它,然后打印下一条,再擦除,再打印。。。
这样所有信息都在一行内显示 仁兄,我运行你写的这个程序了, 的确不是我想要的功能
代码是直接拷贝的?还是你比着我的改的?把你运行的结果贴出来看看。
我想只在一行内打印进度信息,打印完一条,就擦除它,然后打印下一条,再擦除,再打印。。
jazeltq 发表于 2011-09-19 13:04 http://bbs.chinaunix.net/images/common/back.gif
我可不就是这么打印的? printf() 中的那个 '\r' 就是让打印从当前行的开头开始。
页:
[1]
2