Anonymní profil Anonymní uživatel – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Anonymní uživatel – Programujte.comAnonymní profil Anonymní uživatel – Programujte.com

 

Příspěvky odeslané z IP adresy 147.32.121.–

markez
C / C++ › procesy
17. 5. 2008   #74176

prikladam subor , nechapem preco mi nechce spravit ten druhy vypis v metode pokladnaTelo, vie niekto poradit ?

Anonymní uživatel
C / C++ › sdilena pamet
16. 5. 2008   #74057

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);
}

markez
C / C++ › sdilena pamet
16. 5. 2008   #74048

To olgo : no pokial tam nemam *data = 1; tak to ide s tym to vypise hlasku neopravneny pristu do pamate sigsegv

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý