Example #1
0
int main(int argc, char *argv[])
{
    int *memory, semaphore_id;
    key_t key;

    if(argc != 3) {
        printf("Invalid number of arguments. Usage: <pathname> <project_id>\n");
        exit(EXIT_FAILURE);
    }


    key = get_key(argv[1], parse_int(argv[2]));
    memory = get_shared_memory(key, 0);

    if((semaphore_id = semget(key, SEMAPHORE_NUM, 0)) == -1) {
        perror("semget");
        exit(EXIT_FAILURE);
    }

    printf("%d\n", memory[END_INDEX]);

    produce(memory, semaphore_id);

    return EXIT_SUCCESS;
}
Example #2
0
IDL_VPTR IDL_CDECL idl_bam_cxc_get_event(int argc, IDL_VPTR argv[]) {

	unsigned long int *data = get_shared_memory("event");
	
	int n_dim = 2;
	IDL_MEMINT dim[2] = {NPIXELY, NPIXELX};
	IDL_VPTR rv = IDL_ImportArray(n_dim, dim, IDL_TYP_ULONG64, (UCHAR *) data, (IDL_ARRAY_FREE_CB) free, 0);

	return rv;
}
Example #3
0
int main(void)
{
    struct circular_buffer *cb;

    cb = get_shared_memory();

    for (;;) {
        int c, nE;
        c = getchar();
        if (c == EOF)
            break;
        if (sem_wait(&cb->sem) == -1) {
            perror("sem_wait");
            exit(EXIT_FAILURE);
        }
        nE = (cb->E + 1) % cbuf_size;
        /* controllare se buffer pieno */
        while (nE == cb->S) {
            /* buffer pieno */
            if (sem_post(&cb->sem) == -1) {
                perror("sem_post");
                exit(EXIT_FAILURE);
            }
            usleep(100000);
            if (sem_wait(&cb->sem) == -1) {
                perror("sem_wait");
                exit(EXIT_FAILURE);
            }
            nE = (cb->E + 1) % cbuf_size;
        }
        cb->buf[cb->E] = c;
        cb->E = nE;
        if (sem_post(&cb->sem) == -1) {
            perror("sem_post");
            exit(EXIT_FAILURE);
        }
    }
    return EXIT_SUCCESS;
}