web-dev-qa-db-ja.com

2つのプロセス間でパイプを使用して整数を送信する方法!

POSIXシステムでパイプを使用して整数を送信しようとしていますが、write()関数が文字列または文字データの送信に機能しています。パイプで整数を送信する方法はありますか?

よろしく

15
erogol

安全な方法は、snprintfstrtolを使用することです。

ただし、両方のプロセスが同じバージョンのコンパイラを使用して作成されていることがわかっている場合(たとえば、forkedと同じ実行可能ファイルである場合)、C内のすべてのものを次のように読み書きできるという事実を利用できます。 charの配列:

int n = something();
write(pipe_w, &n, sizeof(n));

int n;
read(pipe_r, &n, sizeof(n));
26
aschepler

ASCII整数の表現(例:12345679)を含む文字列を送信するか、intのバイナリ表現(例:0x000xbc0x610x4f)を含む4バイトを送信します。

最初のケースでは、atoi()などの関数を使用して整数を取得します。

1
mouviciel

以下の1つは、パイプへの書き込みとパイプからの読み取りに次のように正常に機能します。

stop_daemon =123;
res = write(cli_pipe_fd_wr, &stop_daemon, sizeof(stop_daemon));
....
res = read(pipe_fd_rd, buffer, sizeof(int));
memcpy(&stop_daemon,buffer,sizeof(int));
printf("CLI process read from res:%d status:%d\n", res, stop_daemon);

出力:

CLI process read from res:4 status:123
0
Raviraj Patil

Aschelplerの答えは正しいですが、これが後で成長する可能性がある場合は、Googleの Protocol Buffers のような単純なプロトコルライブラリを使用するか、基本的なスキーマを使用したJSONまたはXMLを使用することをお勧めします。

0
alecco