免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8005 | 回复: 14
打印 上一主题 下一主题

linux 如何在终端中一行内显示信息 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-09-16 10:22 |只看该作者 |倒序浏览
本帖最后由 jazeltq 于 2011-09-21 10:03 编辑

现在想实现这样的功能,就是在终端中打印一行后,这一行的内容消失,
下一行第一行的位置打印,然后在消失。

如果想实现这样的功能,该如何实现,有思路就行,谢谢

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2011-09-16 11:26 |只看该作者
回复 1# jazeltq


    看看 termios(3).

论坛徽章:
0
3 [报告]
发表于 2011-09-16 14:46 |只看该作者
学习了

论坛徽章:
0
4 [报告]
发表于 2011-09-18 21:48 |只看该作者
termios(3).
这个我看两, 但是不太明白, 跟我到这个实现有什么关系,
我看到有vkill这个字符, 你到意思是说我在printf之后, 下次printf之前得输入这个字符吗?
还是其它意思?

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
5 [报告]
发表于 2011-09-19 00:09 |只看该作者
termios(3).
这个我看两, 但是不太明白, 跟我到这个实现有什么关系,
jazeltq 发表于 2011-09-18 21:48



    如果你只是想要個簡單的類似進度條的效果,那麼用 printf(3) 就可以了,更複雜的效果就需要 termios(3) 提供的功能了。

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <time.h>

  4. int
  5. main(void)
  6. {
  7.         int i;
  8.         char pbar[102];
  9.         struct timespec interval;

  10.         interval.tv_sec = 0;
  11.         interval.tv_nsec = 10000000L;

  12.         memset(pbar, ' ', sizeof(pbar));
  13.         pbar[101] = '\0';

  14.         for (i = 1; i <= 100; i++) {
  15.                 pbar[i-1] = '=';
  16.                 pbar[i] = '>';

  17.                 printf("%2d%% [%s]\r", i, pbar+1);
  18.                 fflush(stdout);
  19.                 nanosleep(&interval, NULL);
  20.         }
  21.         printf("\n");

  22.         return 0;
  23. }
复制代码

论坛徽章:
0
6 [报告]
发表于 2011-09-19 11:27 |只看该作者
谢谢 ls 这为兄弟, 我想实现的功能比进度条复杂些
printf(" Reading file ....    %d(out of %d)", read_file_num++, total_file_num);
就让这行信息, 一直在一行显示,不刷屏,
不知道我说清楚我的想法了没有?

论坛徽章:
0
7 [报告]
发表于 2011-09-19 11:32 |只看该作者
另外, 你说的termios 也实验过,
vkill = \035默认的删除本行的特殊字符, 我想的是 在打完一行之后, 通过printf把vkill特殊字符写入
测试程序思路是这样的
printf("file %d", file_num++);
printf("\035");
但是的结果显示的输出还是会刷屏, 是我思路有问题吗?

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
8 [报告]
发表于 2011-09-19 12:11 |只看该作者
谢谢 ls 这为兄弟, 我想实现的功能比进度条复杂些
printf(" Reading file ....    %d(out of %d)", read_file_num++, total_file_num);
就让这行信息, 一直在一行显示,不刷屏,
jazeltq 发表于 2011-09-19 11:27



    我上面的代码实现的就是这个功能啊,你运行过它么?

论坛徽章:
0
9 [报告]
发表于 2011-09-19 13:04 |只看该作者
我上面的代码实现的就是这个功能啊,你运行过它么?
MMMIX 发表于 2011-09-19 12:11



仁兄,我运行你写的这个程序了, 的确不是我想要的功能
我想只在一行内打印进度信息,打印完一条,就擦除它,然后打印下一条,再擦除,再打印。。。
这样所有信息都在一行内显示

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
10 [报告]
发表于 2011-09-19 15:52 |只看该作者
仁兄,我运行你写的这个程序了, 的确不是我想要的功能


代码是直接拷贝的?还是你比着我的改的?把你运行的结果贴出来看看。

我想只在一行内打印进度信息,打印完一条,就擦除它,然后打印下一条,再擦除,再打印。。
jazeltq 发表于 2011-09-19 13:04



    我可不就是这么打印的? printf() 中的那个 '\r' 就是让打印从当前行的开头开始。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP