Я попытался записать динамический c выделенный массив int в нескольких дочерних процессах и прочитать их в родительском процессе с помощью канала, но результат такой: [-15236548, 37526, -15236548, 37526,0,0,0 , 0,0,0], похоже, адреса читаются вместо реальных значений [1,1,1,1,0,2,1,1,1,1]. Я действительно борюсь с этим весь день, любая помощь будет принята с благодарностью !!!
Дочерний процесс - 10, они сначала будут писать массив каждый, а после того, как все они будут выполнены, родительский процесс читает массив 10.
int *getArr(){
int * arr1 = malloc(sizeof(int) *100);
//do something
return arr1;
}
//write values to pipe
void write_check(int fd, void *buffer, size_t len){
char *p = buffer;
while(len>0){
size_t wlen = write(fd, p, len);
if(wlen <= 0)
exit(0);
p += wlen;
len -= wlen;
}
}
// read values from pipe
void read_check(int fd, void *buffer, size_t len){
char *p = buffer;
while(len>0){
size_t rlen = read(fd, p, len);
if(rlen <= 0)
exit(0);
p += rlen;
len -= rlen;
}
}
// pass values, and get it ready to be wrote
void write_ints(int fd, int *p, int len){
write_check(fd, p, len * sizeof(*p));
}
// allocate memory for fetching values
void read_ints(int fd, int *p, int len){
p = malloc(len * sizeof(*p));
read_check(fd, p, len* sizeof(*p));
}
int main(){
int len = 100;
int *arr1 = malloc(sizeof(int) * 100);
int *fds = malloc(sizeof(int) * 10 * 2);
// child processes write values to pipe
for(int i=0; i<10; i++){
child_pid = fork();
if (child_pid == 0){
// do something
arr1 = getArr();
write_ints(fd[i*2+1], &arr1, len);
}
}
// parent process reads values
for(int i=0; i<10; i++){
// do something
read_ints(fd[i*2], &arr1, len);
}
}