我正在尝试从包含n个子进程的文件大小的文件中读取。我的问题是:如果filesize%subprocesses!= 0,我如何分发filesize以便读取整个文件?我的想法是让其中一个子过程比其他子过程读得少,但我不知道该怎么做。这是我的代码,subprocesses是我fork()的子数。
fstat(infile, &filestatus);
filesize = filestatus.st_size;
fs = (filesize + (subprocesses /2))/subprocesses;
这种舍入的问题是,当我更改子进程时,我无法正确读取infile。非常感谢任何帮助!
答案 0 :(得分:1)
假设subprocesses > 1
和filesize > 0
,两者都是整数类型,您需要做的只是
if (filesize % subprocesses == 0)
{
fs = filesize/subprocesses;
}
else
{
fs = filesize/(subprocesses-1); // amount to be read by all except the last subprocess
fs_last = filesize % (subprocesses - 1) // amount to be read by the last subprocess
}
在数学上,fs_last = filesize - (subprocesses - 1)*fs
将做同样的事情 - 这是整数算术的属性。
您的下一个问题是与每个子流程进行通信需要读取多少内容。或者确保最后一个子进程知道它是最后一个(因此它不会尝试读取fs
个字符而不是fs_last
)。