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