C:从同一个文件中读取多个子进程

问题描述:

我试图从大小为sizeize的文件中读取n个子进程。我的问题是这样的:如果filesize%subprocesses!= 0,我如何分配文件大小以便读取整个文件?我的想法是让其中一个子流程读取比其他流程略少,但我不知道如何去做。这是我的代码,subprocesses是我fork()的子项数。C:从同一个文件中读取多个子进程

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)。

+0

彼得我欠你一个!是的,现在我被困在如何让最后一个子进程知道它的最后一个子进程?我使用for循环来分叉n个子进程,那么我该怎么做呢? – ashadeka

+0

对于每个'fork()'调用,你应该检查返回值。分叉进程接收到返回值为零,如果分叉成功,父接收到一个正值,如果分叉失败,则接收到负值。最后一个子进程的特征是'fork()'在循环的最后一次迭代中返回零。 – Peter

+0

当代码调用'exec *'执行一个子进程(所有的子进程都是子进程)时,包含了要读取的字节数和要读取的第一个字节的偏移量,参数传递给子进程。作为第二种选择,每个进程尝试读取相同的数字字节,最后一个子进程将会碰到EOF,应该对EOF进行编码,以阻止该进程尝试读取更多字节。 – user3629249