2017-02-02 19 views
-2

私はソフトウェアプロジェクトに取り組んでおり、あるプロセスから別のプロセスにいくつかの値を送信する必要があります。私は今日のより良い半分を試して、まだそれは動作していません。誰かが私にこれを行う方法の簡単な例を書いてもらえますか?構造体の内容を名前付きパイプ(fifo)にどのように送信できますか?

+2

一方の端に構造体を '書き込み 'し、他方の構造体を'読み込み'ますか?何を試しましたか?あなたの試みにはどんな問題がありますか? [良い質問をする方法を読む](http://stackoverflow.com/help/how-to-ask)、[最小限の完全で検証可能な例]を作成する方法を学んでください(http://stackoverflow.com/jp)。/help/mcve)。 –

答えて

1

脚本:

struct X foo = /* ... */; 

fwrite(&foo, sizeof foo, 1, outfile); 

リーダー:

struct X foo; 

fread(&foo, sizeof foo, 1, infile); 

FILEポインタinfileoutfileは、おそらく、関連するパイプを開くPOSIXファイルディスクリプタにfdopenを使用することによって得られます。

読み取りと書き込みの両方の呼び出しが1を返すことを確認します。それ以外の場合はエラーが発生しました。

+1

部分書き込みを適切に処理するには、 'size'引数を' 1'に、count引数を 'sizeof foo'にする方がよいでしょう。 '1'の 'count'引数はそれを不可能にします。おそらく 'fwrite(&foo、1、sizeof(foo)、outfile); –

+1

@AndrewHenle' FILE * 'がバッファリングされているかどうかによって異なります。そしてKerrekにとって、私は実際に非テキストデータのパイプを読み書きするためにstdio関数の使用を推奨しません。 'write'を使うと、それがアトミックになります(書き込まれるデータがパイプの内部バッファよりも小さい場合)。 –

+0

@Someprogrammerdude: 'write(2)'はどのように正確に原子ですか?それは書き込まれたバイト数に関しては原子量ですが、それは1つでもないかもしれません。 –

関連する問題