Writing/Reading struct w/ dynamic array through pipe in C

Posted by anrui on Stack Overflow See other posts from Stack Overflow or by anrui
Published on 2010-03-24T05:18:27Z Indexed on 2010/03/24 5:23 UTC
Read the original article Hit count: 319

Filed under:
|
|
|
|

I have a struct with a dynamic array inside of it:

struct mystruct{
 int count;
 int *arr;
}mystruct_t;

and I want to pass this struct down a pipe in C and around a ring of processes. When I alter the value of count in each process, it is changed correctly. My problem is with the dynamic array.

I am allocating the array as such:

mystruct_t x;
x.arr = malloc( howManyItemsDoINeedToStore * sizeof( int ) );

Each process should read from the pipe, do something to that array, and then write it to another pipe. The ring is set up correctly; there's no problem there. My problem is that all of the processes, except the first one, are not getting a correct copy of the array. I initialize all of the values to, say, 10 in the first process; however, they all show up as 0 in the subsequent ones.

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

Now, if I alter my code to, say,

struct mystruct{
 int count;
 int arr[10];
}mystruct_t;

everything is passed correctly down the pipe, no problem. I am using READ and WRITE, in C:

write( STDOUT_FILENO, &x, sizeof( mystruct_t ) );
read( STDIN_FILENO, &x, sizeof( mystruct_t ) );

Any help would be appreciated. Thanks in advance!

© Stack Overflow or respective owner

Related posts about pipes

Related posts about read