heja programiki z pamieci wspoldzielonej, i mam provlem pozniej 2 pliki write.c i read.c plik write.c zapisuje do pamieci inta i chara i pozniej swieta petla while(1)

uruchmiamy programik read.c i qrde powinien zczytac i inta z chara z pamieci wspoldzielonej a ten dran pobiera mi tylko INTA :( ma moze ktos jakis pomysl?

ponizej zrodla

write.c

#include <stdlib.h>
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>

#define KLUCZ 100

int main (void){
	struct semaforek{
		int *wartosc;
		char *tekst;
	};
	int shid;
	struct semaforek semafor;
	shid = shmget(KLUCZ,11,0777 | IPC_CREAT);
	if (shid == -1){
		
	perror("shmget");
	exit(1);
	}
	semafor.tekst = (char*)shmat(shid, NULL,0);
	semafor.wartosc = (int*)(shmat)(shid, NULL, 0);
	
	*semafor.wartosc = 8;
	
	semafor.tekst = "tekst";
	
	printf("%d %s\n",*semafor.wartosc, semafor.tekst);
	while(1);
	return 1;
} 

read.c

#include <stdlib.h>
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>

#define KLUCZ 100

int main (void){
	struct semaforek{
		int *wartosc;
		char *tekst;
	};
	int shid;
	struct semaforek semafor;
	shid = shmget(KLUCZ,11,0777);
	if (shid == -1){
		
	perror("shmget");
	exit(1);
	}
	semafor.wartosc = (int*)shmat(shid, NULL, 0);
	semafor.tekst = (char*)shmat(shid, NULL,0);

	
	printf("%d %s\n",*semafor.wartosc,semafor.tekst);
	return 1;
}