int main (void){
	int segmento1;
	int i, j;
	int *var;
	int pid;
	int semId;
	segmento1 = shmget(IPC_PRIVATE, sizeof(char) * 16, IPC_CREAT | IPC_EXCL| S_IRUSR | S_IWUSR);
	var = (int *)shmat(segmento1, 0, 0);
	semId = semget (8752, 1, 0666 | IPC_CREAT);
	setSemValue(semId);
	*var = 0;
	pid = fork();
	while(1)
	{
		if(pid > 0) //pai
		{
			semaforoP(semId);
			*var+=1;;
			semaforoV(semId);
			printf("var (pai) = %d \n", *var);
		}
		else if(pid == 0)
		{
			semaforoP(semId);
			*var+= 5;
			semaforoV(semId);
			printf("var (filho) = %d \n", *var);
		}
		sleep(2);
	}
}
int main (int argc, char * argv[])
{
	int i;
	char letra = 'o';
	int semId;
	
	// processo que espera 2 segundos
	if (argc > 1)
	{
		semId = semget (8752, 1, 0666 | IPC_CREAT);
		setSemValue(semId);
		letra = 'x';
		sleep (4);
	}
	// processo que espera 4 segundos
	else
	{
		while ((semId = semget (8752, 1, 0666)) < 0)
		{
			putchar ('.'); fflush(stdout);
			sleep (2);
		}
	}

	// area sincronizada pelo semaforo
	for (i=0; ; i++)
	{
		semaforoP(semId);
		printf ("\nProcesso %d iniciado\n", getpid());
		putchar (toupper(letra)); fflush(stdout);
		sleep (rand() %3);
		putchar (letra); fflush(stdout);
		printf ("\nProcesso %d parado\n", getpid());
		semaforoV(semId);
		sleep (rand() %2);
	}
	printf ("\nProcesso %d terminou\n", getpid());
	if (argc > 1)
	{
		sleep(10);
		delSemValue(semId);
	}
	return 0;
}