内部に動的配列を持つ構造体があります。
struct mystruct {
int count;
int *arr;
} mystruct_t;
そして、この構造体を C のパイプを介してプロセスのリングに渡したいと考えています。各プロセスで count の値を変更すると、正しく変更されます。私の問題は動的配列にあります。
私はそのように配列を割り当てています:
mystruct_t x;
x.arr = malloc( howManyItemsDoINeedToStore * sizeof( int ) );
各プロセスは、パイプから読み取り、その配列に対して何かを実行してから、別のパイプに書き込む必要があります。リングは正しく設定されています。そこは問題ありません。私の問題は、最初のプロセスを除くすべてのプロセスが配列の正しいコピーを取得していないことです。最初のプロセスで、すべての値をたとえば 10 に初期化します。ただし、後続のものではすべて 0 として表示されます。
for( j = 0; j < howManyItemsDoINeedToStore; j++ ){
x.arr[j] = 10;
}
ログ:
Initally: 10 10 10 10 10
After Proc 1: 9 10 10 10 15
After Proc 2: 0 0 0 0 0
After Proc 3: 0 0 0 0 0
After Proc 4: 0 0 0 0 0
After Proc 5: 0 0 0 0 0
After Proc 1: 9 10 10 10 15
After Proc 2: 0 0 0 0 0
After Proc 3: 0 0 0 0 0
After Proc 4: 0 0 0 0 0
After Proc 5: 0 0 0 0 0
さて、コードを次のように変更すると、
struct mystruct {
int count;
int arr[10];
} mystruct_t;
すべてがパイプに正しく渡されます。問題ありません。私はCでread
andを使用しています:write
write( STDOUT_FILENO, &x, sizeof( mystruct_t ) );
read( STDIN_FILENO, &x, sizeof( mystruct_t ) );