Exemplo n.º 1
0
main() {
    char *mem_ptr, *ctime();
    long now;
    int n;

    seg_id = shmget(TIME_MEM_KEY, SEG_SIZE, IPC_CREAT|0777);
    if( seg_id == -1 )
        oops("shmget", 1);
    mem_ptr = shmat(seg_id, NULL, 0);
    if (mem_ptr == (void *) -1)
        oops("shmat", 2);

    semset_id = semget(TIME_SEM_KEY, 2, (0666|IPC_CREAT|IPC_EXCL));

    if (semset_id == -1)
        oops("segget", 3);

    set_sem_value(semset_id, 0, 0);
    set_sem_value(semset_id, 1, 0);

    signal(SIGINT, cleanup);

    for (n = 0; n < 60; n++) {
        time(&now);
        printf("\t shm_ts2 waiting for lock\n");
        wait_and_lock(semset_id);
        printf("\t shm_ts2 updateing memory\n");
        strcpy(mem_ptr, ctime(&now));
        sleep(5);
        release_lock(semset_id);
        printf("\t shm_ts released lock\n");
        sleep(1);
    }
    cleanup(0);
}
Exemplo n.º 2
0
int main(int argc, char **argv) {

	int num_items = 15;

	if((argc == 3 && (strcmp("-items", argv[1]) == 0))){
		int aux = atoi(argv[2]);
		if(aux < MAX_ITEMS && aux > 0)
			num_items = aux;
		else{
			sprintf(mensaje, "Error: el número de items debe estar comprendido entre 0 y %d\n", MAX_ITEMS);
			write (STDOUT_FILENO, mensaje, strlen(mensaje));

			exit(0);
		}
	} else if (argc != 1) {
		sprintf(mensaje, "Usage: inicializa [-items] [num_items]\n");
		write (STDOUT_FILENO, mensaje, strlen(mensaje));

		exit(0);
	}

	tpBuffer pBuffer = get_buf(); // Se crea el área de memoria compartida
	sprintf(mensaje, "[padre (pid = %d)] Buffer creado!\n", getpid());
	write (STDOUT_FILENO, mensaje, strlen(mensaje));
	
	initialize(pBuffer, num_items); // Se inicializa

	int semId = get_sem(); // Se crean los semáforos
	set_sem_value (semId, SEM_VACIO, num_items);
	set_sem_value (semId, SEM_MUTEX, 1);
	set_sem_value (semId, SEM_LLENO, 0);

	sprintf(mensaje, "[padre (pid = %d)] Semáforo creado!\n", getpid());
	write (STDOUT_FILENO, mensaje, strlen(mensaje));
	return 0;
}