我正在尝试为将磁盘的一部分复制到另一部分制作一个进度条。我正在使用一个进度条类,该类用于打印我在堆栈交换(https://codereview.stackexchange.com/questions/186535/progress-bar-in-c)上发现的进度条,该进度条已进行了稍微修改以允许更高的精度(显示小数点)。
但是,我使用矢量来复制文件,如果我在声明矢量之后放置进度条对象的声明,我将显示矢量的一部分内容,而不是进度条。
这是无效的代码示例:
vector<char> buff(512);
progress_bar progress{std::cout, 70u, "Formating"};
int fd=open("/dev/sdc1",O_RDONLY);
int fd2=open("/dev/sdb1",O_RDWR);
double NbOfBlocks = 11800.0;
if (fd>0)
{
for (int i = 0.0; i<NbOfBlocks; i++)
{
progress.write(i/NbOfBlocks);
read(fd,&buff[0],512*i);
write(fd2,&buff[0],512*i);
}
}
如果我这样做:
progress_bar progress{std::cout, 70u, "Formating"};
vector<char> buff(512);
int fd=open("/dev/sdc1",O_RDONLY);
int fd2=open("/dev/sdb1",O_RDWR);
double NbOfBlocks = 11800.0;
if (fd>0)
{
for (int i = 0.0; i<NbOfBlocks; i++)
{
progress.write(i/NbOfBlocks);
read(fd,&buff[0],512*i);
write(fd2,&buff[0],512*i);
}
}
一切正常。
任何想法为何或如何避免它?
答案 0 :(得分:3)
read(fd,&buff[0],512*i);
当i> 0时缓冲区溢出。