linux上编写进度条

一、预备的两个小知识

1、缓冲区

首先认识一下缓冲区:先写一个.c文件如下:
在这里插入图片描述
我们执行一下这个程序时,我们发现当过三秒之后“you can see me ”这句话才打印出来,这是因为有缓冲区,printf执行完之后将这一个字符串保存在了缓冲区,当 return 0 程序结束后进行刷新才会将字符串打印出来
fflush(stdout);:在屏幕上刷新,就算程序没有结束也可以打印在屏幕上。

2、回车与换行

换行:换到下一行的相同位置。
回车:回到一行的最开始,“\r”:只回车,不换行。

二、倒计时程序

这个程序是先对上面两个小知识的熟悉和操作。
在这里插入图片描述

三、编写入门的进度条

在这里插入图片描述
打印出来后是:
在这里插入图片描述

在这里插入图片描述

四、编写一个正式的

在这里插入图片描述
最后的运行结果如下:
在这里插入图片描述

五、模拟实现和下载速度相关的进度条

进度条不可能是像上面那样自己规定速度自己走的,肯定是跟着别的程序运行,所以我们模拟实现一下,如下:
在这里插入图片描述
生成如下:
在这里插入图片描述
在这里插入图片描述

以上就是进度条的实现了。

  • 45
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 33
    评论
以下是实现上述功能的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <stdbool.h> // 判断是否为质数 bool is_prime(int n) { if (n <= 1) { return false; } for (int i = 2; i * i <= n; i++) { if (n % i == 0) { return false; } } return true; } // 进度条 void progress_bar(int percent) { printf("["); for (int i = 0; i < 50; i++) { if (i < percent / 2) { printf("#"); } else { printf(" "); } } printf("] %d%%\r", percent); fflush(stdout); } // 线程函数 void *thread_func(void *arg) { int n = *(int *)arg; bool result = is_prime(n); if (result) { printf("%d is prime.\n", n); } else { printf("%d is not prime.\n", n); } return NULL; } int main(int argc, char *argv[]) { if (argc != 3) { printf("Usage: %s <num1> <num2>\n", argv[0]); return 1; } int num1 = atoi(argv[1]); int num2 = atoi(argv[2]); // 初始化线程属性 pthread_attr_t threadattr; pthread_attr_init(&threadattr); // 创建线程 pthread_t thread1, thread2; pthread_create(&thread1, &threadattr, thread_func, &num1); pthread_create(&thread2, &threadattr, thread_func, &num2); // 等待线程结束 pthread_join(thread1, NULL); pthread_join(thread2, NULL); // 销毁线程属性 pthread_attr_destroy(&threadattr); // 显示进度条 for (int i = 0; i <= 100; i += 10) { progress_bar(i); usleep(500000); } printf("\n"); return 0; } ``` 在命令行中执行该程序时,需要输入两个参数,如下所示: ```bash $ ./program 12345 67890 ``` 程序将创建两个线程,每个线程分别判断一个数字是否为质数。等待两个线程结束后,程序将显示一个简单的进度条,表示程序正在运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值