【发布时间】:2019-12-11 02:33:07
【问题描述】:
背景
我正在为此操作系统课程构建的项目的背景。该项目将执行一个名为 program1 的程序,然后该程序将创建 9 个管道,一个信号量,一个共享内存,用于计算已读取的字符数,然后还接受文件名的命令行参数。第一个程序还将在创建其他所有内容后生成 9 个子节点,并将所有以前的信息传递给它们,一个从 program1 到特定子节点的管道、信号量、共享内存位置、文件名。
每个孩子都可以同步访问一个文件,共享内存。然后每个孩子将随机读取 1-10 个字符,然后将共享内存增加该数量。然后,孩子们将发送当前具有访问权限的程序的名称以及已读取的字符并将它们写入管道。如果他们到达行尾,他们还将在写入管道的同一字符串中写入读取的字符总数。当特定的孩子这样做时,它会将执行传递给program1执行。
当程序一通过信号量获得执行权限时,它将读取通过所有非阻塞管道发送的字符串。然后将该字符串写入输出文件,然后释放信号量供任何子级再次使用,直到达到 eof。
问题
现在我已经告诉你程序将如何运行,我有一个问题。我如何在读取同一文件的所有进程之间跟踪文件指针的位置及其在文件中的位置。我可以将文件指针本身传递给孩子并使用它吗?还是会因为内存空间不同而无法通过?
我猜我可能会做的是访问共享内存和 获取文件位置,因为共享内存的 int 值为 将读取多少个字符。说了这么多,我觉得 这将是不必要的开销和计算 如果我能以不同的方式做到这一点,就避免了。
【问题讨论】:
标签: c++ file pointers synchronization children