ここでは、パイプを閉じずにパイプに書き込んだ後、そのパイプをどのようにフラッシュできるかについて質問しています。 どのスレッドでも私はさまざまな提案を見ることができましたが、明確な解決策を見つけることができませんでした。ここでCを閉じないでフラッシングパイプ
は簡単な要約です:
パイプ上のブロッキング読む回避するための最も簡単な方法は、読んでいる正確なバイト数を書くことであろう。
パイプの代わりにptmxを使用することもできますが、人々はそれがあまりにも多いかもしれないと言いました。
注:これは、パイプ
にfsyncを使用することはできません任意の他のより効率的なソリューションがありますか?
編集:送信者がn文字を書きたいが、クライアントが(ただし、m> n)は、m個の文字を読み取ると
フラッシュが便利です。クライアントは別のm-n文字の待機をブロックします。送信者がクライアントと再び通信したい場合は、パイプを閉じるオプションなしに彼を去り、正確なバイト数を送信するだけでバグの良いソースになる可能性があります。
受信機は、このように動作し、それを変更することはできません。
while((n=read(0, buf, 100)>0){
process(buf)
ので、送信者が処理を取得したい:「FILE1」と「FILE2」はする必要がありますいる:
write(pipe[1], "file1\0*95", 100);
write(pipe[1], "file2\0*95", 100);
私が探しているのは、そのようなことをする方法です(区切り文字として\ nを使用する必要はありません)。
write(pipe[1], "file1\nfile2", 11); //it would have worked if it was ptmx
(読み取りと書き込みを使用)
これは[X-Y問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)と非常によく似ています。一般的に言えば、パイプを流す必要はないので、本当の問題は何ですか? –
"pts"はどういう意味ですか? –
@ジョン:私は擬似端末マスター/スレーブを指していました。元の投稿を更新しました。 –