C实现LINUX命令行环境下的进度条功能

2551654928 2020-3-30 2994 [百度已收录] [搜狗已收录] [360已收录]

代码作者:冬瓜

虽然Linux通过命令行操作时非常方便的,但是有时候那又臭又长的脚本执行过程的各种输出也实在看着乱七八糟,因此用C语言写了一个简单的进度条,因为是根据我自己的项目写的,所以只是单纯的循环进度条,而不是根据百分比显示。大神自己修改哦!

#include <stdio.h>  
#include <string.h>  
#include <unistd.h>
#include <signal.h> 
#include <sys/types.h>
#include <errno.h>
#include <sys/wait.h>
 
void proc(pid_t pid);
void start_proc(char* tip,pid_t pid);
 
void proc(pid_t pid)  
{     
    int i,j;
    char fh[] = {'-','-','\\','\\','|','|','/','/'};
    while(1){
        for (j = 1; j <= 50; ++j)  
        {          
            
            printf("\r进度:[ "); 
            for (i = 1; i <= 50; ++i)  
            {  
                if(i==j){
                    printf("\033[34m#\033[0m");  
                }else{
                    printf("\033[33m-\033[0m");  
                }        
            }            
            printf(" ] [ \033[34m %c runing...\033[0m ]",fh[j%8]); 
            fflush(stdout);
            usleep(50*1000);
            int status;
            if(waitpid(pid, &status, WNOHANG) == pid){
                printf("\r进度:[ "); 
                for (i = 1; i <= 50; ++i)  
                { 
                    printf("\033[34m#\033[0m");  
                }            
                if(errno != EINTR){
                    printf(" ] [ \033[32m    done    \033[0m ]");
                }else{
                    printf(" ] [ \033[32m    done    \033[0m ]");     
                }
                fflush(stdout);
                return;
            }
        }      
    }
}  
  
void start_proc(char* tip,pid_t pid)  
{          
 
    printf("%s     PID:%d\n",tip,pid); 
    proc(pid) ;
    printf("\n");
}  
int main()  
{          
    pid_t pid;
    pid = fork();
    
    if(pid < 0){
        printf("当前进程出错\n");
    }else if(pid == 0){
        int i =0;
        
        sleep(10);
        
         return 0;
    }else{
        //while(kill(0,pid) != 0);
        start_proc("正在初始化环境....",pid);
    }
    return 0;  
}


最后于 2020-4-16 被2551654928编辑 ,原因:

上一篇:C语言文本简单加解密程序源码
下一篇:C实现的CENTOS宽带监控小程序
这家伙太懒了,什么也没留下。
最新回复 (1)
返回
发新帖
扫码访问