我想创建两个子进程并分配文件中的单词排序。例如,第一个单词转到child1,然后第二个单词转到child2,然后第三个单词转到child1,依此类推。这两个子进程应该并行运行,并使用UNIX sort命令对单词进行排序并将输出存储到文件中。
算法如下
1)子进程Parser从文件中获取所有单词并写入管道
2)子进程Sorter从管道中读取并使用带有execlp函数的sort对单词进行排序
3)子进程Supressor使用uniq命令删除重复项。
现在我想将单词的排序拆分为2个子进程,但我不明白如何执行此操作。
感谢您提前提供任何意见或帮助。
答案 0 :(得分:2)
如果你不想在这里使用sort --parallel=2 -u input_file
而你需要使用管道作为练习,那么你可以在这里使用并行的 merge-sort 。将输入文件拆分为两个。使用您喜欢的任何方法对每一半进行排序合并已排序的一半,删除重复项。
以下是相应的bash命令:
mkfifo sorted_part1 sorted_part2
sort <(split -un r/1/2 input_file) >sorted_part1 & # sort 1st half
sort <(split -un r/2/2 input_file) >sorted_part2 & # sort 2nd half
sort -um sorted_part1 sorted_part2 # merge, remove duplicates
在您的C代码中,您不需要使用命名管道,而是可以使用普通管道。并实现split
而不是生成外部命令:
sort
命令)