我试图从一个文件中读取大小为file size的n个子进程。我的问题是:如果文件化%子进程!=0,如何分发文件大小以便读取整个文件?我的想法是让其中一个子进程的读取量比其他子进程少一点,但我不确定如何做到这一点。这是我的代码,subprocesss是我fork()的子进程数。
fstat(infile, &filestatus);
filesize = filestatus.st_size;
fs = (filesize + (subprocesses /2))/subprocesses;
这种类型的舍入的问题是,当我更改子流程时,我没有正确地读取infile。非常感谢您的帮助!
最佳答案
假设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
)。关于c - C:多个子进程从同一文件读取,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42591334/