好的,所以我是一项关于管道的任务。目标是从命令行获取“深度”“文件名”和“属性”。该文件是一个保存用户信息的txt文件,属性只是我们稍后要排序的信息。然而,深度很重要,因为我需要根据用户输入的数字使用分叉创建一棵二叉树。深度为 1 时,我将拥有我的主进程、一个内部节点和 2 个叶节点。深度为 2 时,我将拥有我的主进程,一个内部节点有两个内部节点作为子节点,并且它们每个都有两个叶节点作为子节点......等等。
我的代码目前将所有信息读入结构数组,创建正确数量的节点的二叉树,并且我的所有排序算法(Shell、Quick、Bubble)都可以工作。
现在,我必须实现命名管道并将数据向下传递到叶节点进行排序。每个内部节点都应该将数据拆分为其子节点。然后,一旦数据到达叶节点,它们将实施不同的排序算法并将结果返回给它们的父/内部。内部节点将从它的两个子节点中获取排序后的数据并合并结果。最终,数据将一路合并回到锚节点。
我的问题是我根本无法将注意力集中在管道上。我不知道如何跟踪它们或在正确的时间初始化它们。我想过找出给定的深度应该产生多少叶节点并以这种方式均匀地分割数据,然后只做一个 if 语句来对数据的每个部分运行正确的排序器,但这并不能解决正确的问题问题。任何人都可以帮助我实现这一点,或者至少可以开始一些事情吗?
树的创建看起来像这样
void forkTree(int size){
if(size == 0){
return;
}
int left = fork();
if(left != 0){
int right = fork();
if(right == 0){
sleep(1);
forkTree(size-1);
}
}
else{
sleep(1);
forkTree(size-1);
}
它是这样调用的
if(depth>0){
//initial fork
int anchor = fork();
//make binary tree only in child process
if(anchor==0){
forkTree(depth);
}