0

2 つの子 (execl によって 2 つのプロセスを実行) と 1 つの fifo を持つプログラムがあります。printf が使えないので、両方の子に fifo の読み書きをさせたい。問題は、最初の子だけが私の FIFO に書き込むすべてが画面に出力されることを確認することです。「fifoCommunication」は、父が作成した fifo の名前です。最初の子のプロセス内のコードのみを次に示します。

int main()    {
int fd_write = open("fifoCommunication",O_WRONLY);
dup(fd_write,0);
write(fd_write,"to be printed to screen!" ,18);}

私はそれが正しい構文ではないことを知っていますが、メッセージが画面に正しく出力されていることを確認する方法がわかりません。また、他の子が画面にメッセージを出力するのを防ぎます。

4

1 に答える 1

1

残念ながら、あなたの要件は互いに矛盾しています。

最初の子だけが、FIFO に書き込むすべてが画面に出力されるようにします。

したがって、FIFO は取得したものをコンソールに出力する必要があります。FIFO は、印刷されたプロセスを区別しません。この時点で write を呼び出したのが最初の子か 2 番目の子かはわかりません1

他の子が画面にメッセージを出力するのを防ぎ、FIFO にのみ

したがって、これは上記と矛盾します。なぜなら、前者の要件が満たされる場合、「FIFO のみに」印刷する場合は画面にも印刷する必要があるためです。fifo と stdout に別々に出力することで、目的を達成できます。

1 (たとえば、印刷するメッセージの最初のバイトをチェックするようにカーネルコードを変更しない限り、各データの前に「1」または「2」などを選択し、それに基づいてカーネルで適切なアクションを実行しますが、その場合、マシン上の fifo の他のすべての使用法に何が起こるかは、ほとんどの場合良いことではないので、実行しないでください)

于 2016-04-20T12:54:03.623 に答える