Linux C 语言管道、分支和信号

Linux C language pipes, forks and signals

我需要家庭作业方面的帮助,问题是我必须通过使用进程、管道、叉子和信号来创建罐头装配线的模拟,我不能使用其他 IPC 机制作为互斥锁或信号量.

我知道如何fork一个进程,有一个child,在这种情况下,我需要创建一个罐头,然后通过几个站(child进程)一个一个地传递,站台像熔化、涂装、包装等等。

我应该为罐头使用结构吗?或 child 进程的 PID?

问题是我如何将罐头从 A 站发送到 B 站,然后从 B 站发送到 C 并且,使用管道,我知道如何使用管道从 parent 发送消息到一个child,但在这种情况下,我需要传达所有 childs(站)

此外,这必须在使用 QT 或 GTK 的 GUI 上(我更喜欢 GTK,即使我不太了解它看起来更简单)并且程序需要如果我暂停模拟它必须告诉我如何打包了很多罐头,哪个站台上有罐头,并生成最终报告,每100个罐头,组成一包罐头,我要说做了多少包。

我阅读了很多指南,看了一些视频,尝试了一些示例,但我就是不知道如何知道 child 我目前在哪个站,所以我可以知道哪个站就是知道在那个站做什么,不知道怎么把罐子一个一个的通过所有的站。

来自评论的提案,伪代码(转C是作业,所以我不这样做):

make P-A pipe
make A-B pipe
make B-C pipe

if fork()
    // process A
    while (read can from P-A pipe)
        do something to can
        write can to A-B pipe
else if fork()
    // process B
    while (read can from A-B pipe)
        do something to can
        write can to B-C pipe
else if fork()
    // process C
    while (read can from B-C pipe)
        do something to can
        write can to final output
else
    // parent
    get can from input/file (or make a new can)
    write can to P-A pipe