To olgo : tak uz som ten problem vyriesil, vyskusal som to prihlaseny ako root :) teraz riesim dalsi problem tak ho sem pridam ked uz je tu to vlakno... teda v strukture je pole ktoremu dlzku urci az proces a zapise don data ... to ide ale potom ked chce druhy proces citat tie data tak to uz nejde... moze sa to alokovat takto?
btw : co je to ten valgrind?
kod:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
typedef struct {
int cislo;
int *pole;
} pokladna;
int main()
{
key_t key = 5678;
int shmid;
int i,j;
pokladna *data,*data2;
pokladna *pole;
pid_t child_pid;
//vytvorenie zdielaneho sktoru
shmid = shmget(key, 5*sizeof(pokladna),IPC_CREAT);
//vytvorenie dalsieho procesu
child_pid = fork ();
if (child_pid != 0)
{
printf ("Ja som rodic a moje cislo procesu je %d\n", (int) getpid ());
printf("rodic konci \n");
}
else {
printf ("Ja som potomok a moje cislo procesu je %d\n", (int) getpid ());
data = (pokladna *) shmat(shmid,(void *)0,0);
//potomok zapise nieco do zdielanej pamate
for( i = 0; i < 5 ; i++)
{
data->cislo = i;
data->pole = (int *) malloc( (i+1)*sizeof(int) );
for(j = 0 ; j < i+1; j++ )
{
data->pole[j] = i;
}
data++;
}
shmdt(data);
printf("potomok cislo %d konci \n ",(int) getpid() );
_exit(0);
}
wait();
data2 = (pokladna *) shmat(shmid,(void *)0,0);
for(i = 0 ; i < 5; i++)
{
printf ("Cislo struktury je %d\n" , data2->cislo);
//printf ("Hodnoty su: ");
//for(j=0; j < (data2->cislo)+1 ; j++)
// {
// printf(" %d", data2->pole[j] );
//}
//printf("\n");
data2++;
}
shmdt(data2);
shmctl(shmid,IPC_RMID,0);
return(0);
}