POSIXシステムでパイプを使用して整数を送信しようとしていますが、write()
関数が文字列または文字データの送信に機能しています。パイプで整数を送信する方法はありますか?
よろしく
安全な方法は、snprintf
とstrtol
を使用することです。
ただし、両方のプロセスが同じバージョンのコンパイラを使用して作成されていることがわかっている場合(たとえば、fork
edと同じ実行可能ファイルである場合)、C内のすべてのものを次のように読み書きできるという事実を利用できます。 char
の配列:
int n = something();
write(pipe_w, &n, sizeof(n));
int n;
read(pipe_r, &n, sizeof(n));
ASCII整数の表現(例:12345679
)を含む文字列を送信するか、intのバイナリ表現(例:0x00
、0xbc
、0x61
、0x4f
)を含む4バイトを送信します。
最初のケースでは、atoi()
などの関数を使用して整数を取得します。
以下の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
Aschelplerの答えは正しいですが、これが後で成長する可能性がある場合は、Googleの Protocol Buffers のような単純なプロトコルライブラリを使用するか、基本的なスキーマを使用したJSONまたはXMLを使用することをお勧めします。