今日、C で pipe() と fork() と exec() を使い始めましたが、今問題があります:
メイン プログラムは、2 つのパイプとフォークを作成します。子プロセスは別のプログラムに対して exec() を実行します。このプログラムは現在、stdin から読み取り、親と通信し、stdout を介して結果を書き込むテスト プログラムにすぎません。メイン プログラムは、データを受信し、SQLite 3 データベースと通信し、パイプを使用してデータを返すことになっています。問題のこの部分は解決され、パイプは適切に開閉され、通信が行われます。
次に、問題は、ある時点で子プロセス(exec()で呼び出されるプロセス)で、これがあります:
printf("Strid sent: %s\n", strid);
write(4,strid,sizeof(strid));
printf("Str sent: %s\n", str);
write(4,str,sizeof(str));
そして、親はこの部分で適切に読んでいるはずです:
read(select[0],strid, sizeof(strid));
printf("Strid recived: %s\n",strid);
int id = atoi(strid);
printf("Id recived: %d\n",id);
read(select[0],buffer, sizeof(buffer));
printf("Buffer recived: %s\n",buffer);
しかし、これらのprintfで私が受け取ったのは次のとおりです。
Strid sent: 1
Str sent: start
Strid recived: 1
Id recived: 1
Buffer recived: 7� (and other strange characters)
ご覧のとおり、問題は 2 番目のコマンドの受信にあります (その部分はそのままコピーされ、他のコードは含まれていません)。
str を受け取る「buffer」変数は char buffer[20] として宣言されており、read() の前に使用されていないことも言わなければなりません。
前もって感謝します!