当前位置:   article > 正文

Linux第一个小程序-进度条_centos 7.9 倒计时 进度条

centos 7.9 倒计时 进度条

目录

\r&&\n

行缓冲区概念

倒计时程序

进度条代码


\r&&\n

回车概念
换行概念
  • \n
  1. [root@VM-12-17-centos lesson8]# touch test.c
  2. [root@VM-12-17-centos lesson8]# touoch Makefile
  3. bash: touoch: command not found
  4. [root@VM-12-17-centos lesson8]# touch Makefile
  5. [root@VM-12-17-centos lesson8]# vim Makefile
  6. [root@VM-12-17-centos lesson8]# ll
  7. total 4
  8. -rw-r--r-- 1 root root 71 Jan 13 21:43 Makefile
  9. -rw-r--r-- 1 root root 0 Jan 13 21:40 test.c
  10. [root@VM-12-17-centos lesson8]# vim test.c
  11. [root@VM-12-17-centos lesson8]# make
  12. gcc -o mytest test.c
  13. [root@VM-12-17-centos lesson8]# ls
  14. Makefile mytest test.c
  15. [root@VM-12-17-centos lesson8]# ./mytest
  16. hello world
  17. [root@VM-12-17-centos lesson8]# cat test.c
  18. #include<stdio.h>
  19. int main()
  20. {
  21. printf("hello world\n");
  22. return 0;
  23. }
  • \r
  1. [root@VM-12-17-centos lesson8]# vim test.c
  2. [root@VM-12-17-centos lesson8]# make
  3. gcc -o mytest test.c
  4. [root@VM-12-17-centos lesson8]# cat test.c
  5. #include<stdio.h>
  6. int main()
  7. {
  8. printf("hello world\r");
  9. return 0;
  10. }
  11. [root@VM-12-17-centos lesson8]# ./mytest
  12. [root@VM-12-17-centos lesson8]# make clean
  13. rm -f mytest
  • \r\n
    1. [root@VM-12-17-centos lesson8]# vim test.c
    2. [root@VM-12-17-centos lesson8]# make clean
    3. rm -f mytest
    4. [root@VM-12-17-centos lesson8]# cat test.c
    5. #include<stdio.h>
    6. int main()
    7. {
    8. printf("hello world\r\n");
    9. return 0;
    10. }
    11. [root@VM-12-17-centos lesson8]# make
    12. gcc -o mytest test.c
    13. [root@VM-12-17-centos lesson8]# ./mytest
    14. hello world

行缓冲区概念

  1. #include <stdio.h>
  2. int main()
  3. {
  4. printf("hello world\n");
  5. sleep(3);
  6. return 0;
  7. }

什么现象?        直接打印hello world,好像没有执行sleep

  1. #include <stdio.h>
  2. int main()
  3. {
  4. printf("hello world");
  5. sleep(3);
  6. return 0;
  7. }

什么现象??    先不显示,隔一段时间再打印,好像是先执行了sleep,再执行printf?

        并不是!!一定是先执行printf(从上到下),再执行sleep,sleep时,hello world字符串没有被刷新,数据在sleep期间被保存起来了。

        为什么\n,数据就显示出来了呢?缓冲区有自己的刷新策略,包括行缓冲

        我们也可以自主刷新,使用一定的函数帮助我们实现自主刷新

  1. #include <stdio.h>
  2. int main()
  3. {
  4. printf("hello world");
  5. fflush(stdout);
  6. sleep(3);
  7. return 0;
  8. }

        \r不显示的情况,其光标到达hello world的后一位,遇到\r回到此行最前面,Xshell接着打印[root@VM-12-17-centos lesson8]将hello world覆盖了,为了使其效果明显,我们改变自主刷新的位置

修改前

  1. #include<stdio.h>
  2. int main()
  3. {
  4. printf("hello world\r");
  5. sleep(3);
  6. fflush(stdout);
  7. return 0;
  8. }

修改后

  1. #include <stdio.h>
  2. int main()
  3. {
  4. printf("hello world\r");
  5. fflush(stdout);
  6. sleep(3);
  7. return 0;
  8. }

倒计时程序

        根据上述的\r\n的特性,我们编写一个倒计时程序
  1. #include<stdio.h>
  2. int main()
  3. {
  4. int i=9;
  5. for(;i>=0;i--)
  6. {
  7. printf("%d\n",i);
  8. sleep(1);
  9. }
  10. return 0;
  11. }
         我们尝试用\r,其字符在缓冲区存放,并未刷新,所以并不显示
  1. #include<stdio.h>
  2. int main()
  3. {
  4. int i=9;
  5. for(;i>=0;i--)
  6. {
  7. printf("%d\r",i);
  8. sleep(1);
  9. }
  10. return 0;
  11. }

         

        我们使用函数对其刷新,方便看倒计时

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int i=9;
  5. for(;i>=0;i--)
  6. {
  7. printf("%d\r",i);
  8. fflush(stdout);
  9. sleep(1);
  10. }
  11. printf("\n");
  12. return 0;
  13. }

        我们尝试从10开始倒计时,键盘设备称为字符设备,是按字符打印、显示,所以从10开始倒计时,我们不能单纯地修改i的初始值为10,我们可以%2d去预留两个字符

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int i=10;
  5. for(;i>=0;i--)
  6. {
  7. printf("%2d\r",i);
  8. fflush(stdout);
  9. sleep(1);
  10. }
  11. printf("\n");
  12. return 0;
  13. }

进度条代码

样式

新建

  1. [root@VM-12-17-centos lesson8]# mkdir proc
  2. [root@VM-12-17-centos lesson8]# cd proc
  3. [root@VM-12-17-centos proc]# touch proc.c
  4. [root@VM-12-17-centos proc]# touch proc.h
  5. [root@VM-12-17-centos proc]# touch main.c

main.c内

  1. #include "proc.h"
  2. int main()
  3. {
  4. process();
  5. return 0;
  6. }

 proc.h内

  1. [root@VM-12-17-centos proc]# vim proc.h
  2. [root@VM-12-17-centos proc]# cat proc.h
  3. #pragma once
  4. #include <stdio.h>
  5. extern void process();

proc.c内

  1. #include "proc.h"
  2. #include<string.h>
  3. #include<unistd.h>
  4. #define SIZE 102
  5. #define STYLE '='
  6. #define ARR '>'
  7. // "|/-\\"
  8. void process()
  9. {
  10. const char *lable = "|/-\\";
  11. char bar[SIZE];
  12. memset(bar,'\0',sizeof(bar));
  13. int i=0;
  14. while(i<=100)
  15. {
  16. printf("[%-100s][%d%%][%c]\r",bar,i,lable[i%4]);
  17. fflush(stdout);
  18. bar[i++]=STYLE;
  19. if(i!=100)
  20. bar[i]=ARR;
  21. usleep(100000);
  22. }
  23. printf("\n");
  24. }

Makefile

  1. [root@VM-12-17-centos proc]# touch Makefile
  2. [root@VM-12-17-centos proc]# vim Makefile
  3. [root@VM-12-17-centos proc]# cat Makefile
  4. myprocess:main.c proc.c
  5. gcc -o myprocess main.c proc.c
  6. .PHONY:clean
  7. clean:
  8. rm -f myprocess

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/322605
推荐阅读
相关标签
  

闽ICP备14008679号