{
printf("please input the src and des file\n");
return -1;
}
/** 产生子进程 */
pid = fork();
/** 如果是子进程,负责执行复制命令 */
if (0 == pid)
{
sprintf(szExcueCommand,"%s %s %s","cp",argv[1],argv[2]);
printf("%s\n",szExcueCommand);
system(szExcueCommand);
return 0;
}
/** 父进程负责把正在复制的原文件和复制的目标文件的大小计算出来 , 就可以知道复制的进度,计算频率为1秒一次 */
else
{
/** 获得原文件的大小 */
if (-1 == getFileMsg(argv[1],szSrcFileMsg))
{
printf("get sorce file message failed \n");
return -1;
}
/** 把原文件大小的信息取出来 */
strncpy(szSrcFileSizeMsg,szSrcFileMsg+21,4);
szSrcFileSizeMsg[5] = '\0';
nSrcFileSize = atoi(szSrcFileSizeMsg);
while(1)
{
sleep(1);
nUsedTime ++;
/** 获得目标文件的大小 */
if (-1 == getFileMsg(argv[2],szSDestFileMsg))
{
printf("get dest file message failed \n");
return -1;
}
/** 把原文件大小的信息取出来 */
strncpy(szDestFileSizeMsg,szSDestFileMsg+21,4);
szDestFileSizeMsg[5] = '\0';
nDestFileSize = atoi(szDestFileSizeMsg);
/*** 计算复制的进度 */
fRate = (nDestFileSize * 100) / nSrcFileSize ;
/** 计算剩下的时间 */
nLastTime = ((100 - fRate) * nUsedTime) / fRate;
/** 打印进度条 */
printf("已复制 %.2f %%还需要%.1f秒\n",fRate,nLastTime);
/** 复制完成之后,退出循环 */
if (nSrcFileSize == nDestFileSize)
{
printf("复制完成,耗时 %d 秒\n",nUsedTime);
break;
}
}
}
return 0;
}
/** 得到文件的详细信息 */
int getFileMsg(char* pchCmd,char *pchMsg)
{
FILE *fstream=NULL;
char szBuff[BUFSIZ] = {0};
char szExcueCommand[150] = {"ls -lh"};
sprintf(szExcueCommand,"%s %s",szExcueCommand,pchCmd);
if (NULL==(fstream=popen(szExcueCommand,"r")))
{
perror("execute command failed: ");
return -1;
}
/** 得到命令的结果 */
if (NULL == fgets(szBuff, sizeof(szBuff), fstream))
{
pclose(fstream);
return -1;
}
pclose(fstream);
strcpy(pchMsg,szBuff);
return 0;
}
Linux下执行结果为:
./mycp bigfile destbigfile
cp bigfile destbigfile
已复制 3.00 %还需要32.3秒
已复制 5.00 %还需要38.0秒
已复制 8.00 %还需要34.5秒
已复制 10.00 %还需要36.0秒
已复制 12.00 %还需要36.7秒
已复制 13.00 %还需要40.2秒
已复制 14.00 %还需要43.0秒
已复制 17.00 %还需要39.1秒
已复制 20.00 %还需要36.0秒
已复制 21.00 %还需要37.6秒
已复制 24.00 %还需要34.8秒
已复制 24.00 %还需要38.0秒
已复制 27.00 %还需要35.1秒
已复制 32.00 %还需要29.8秒
已复制 33.00 %还需要30.5秒
已复制 35.00 %还需要29.7秒
已复制 38.00 %还需要27.7秒
已复制 41.00 %还需要25.9秒
已复制 42.00 %还需要26.2秒
已复制 43.00 %还需要26.5秒
已复制 44.00 %还需要26.7秒
已复制 48.00 %还需要23.8秒
已复制 50.00 %还需要23.0秒
已复制 52.00 %还需要22.2秒
已复制 53.00 %还需要22.2秒
已复制 53.00 %还需要23.1秒
已复制 57.00 %还需要20.4秒
已复制 59.00 %还需要19.5秒
已复制 61.00 %还需要18.5秒
已复制 63.00 %还需要17.6秒
已复制 63.00 %还需要18.2秒
已复制 66.00 %还需要16.5秒
已复制 69.00 %还需要14.8秒
已复制 70.00 %还需要14.6秒
已复制 72.00 %还需要13.6秒
已复制 73.00 %还需要13.3秒
已复制 75.00 %还需要12.3秒
推荐阅读
- 如何写工作总结ppt,如何写工作总结PPT
- netredis秒杀功能,使用redis解决秒杀场景
- 最会玩的游戏角色扮演游戏,最会玩的游戏角色扮演游戏名字
- pythondate函数 python $date
- js如何判断是否存在id,js判断dom是否存在
- 向上跳的html5',向上跳的好处
- python文件批量打开,python快速打开
- mysql版本号怎么查看 mysql 查版本
- 什么手法让水流多视频,怎样让水流的更多