我试图从一个文件中读取大小为file size的n个子进程。我的问题是:如果文件化%子进程!=0,如何分发文件大小以便读取整个文件?我的想法是让其中一个子进程的读取量比其他子进程少一点,但我不确定如何做到这一点。这是我的代码,subprocesss是我fork()的子进程数。

fstat(infile, &filestatus);
filesize = filestatus.st_size;
fs = (filesize + (subprocesses /2))/subprocesses;

这种类型的舍入的问题是,当我更改子流程时,我没有正确地读取infile。非常感谢您的帮助!

最佳答案

假设subprocesses > 1filesize > 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/

10-12 20:35