int main(int argc, char ** argv) { sensor_init_client(); init_timer(5,0); /************* EXEMPLE *******************/ // On a 2 capteurs sur la carte //struct sensor sensor_board[2]; //sensor_board. //uint8_t * data = "\x00\x03\xFC\x01\x01\x01\x02\x02\x01\x02\x03\x02\x01\x12\xFF"; // essaie inform uint8_t * data = "\x00\x00\xFE\x01"; uint8_t len = 4; uint8_t ip[2] = {0, 0}; rawdata_sensor(data, len, ip); uint8_t * data_2 = "\x00\x01\xFC\xF2\x01\x01\x01"; uint8_t len_2 = 4; uint8_t ip_2[2] = {0, 0}; rawdata_sensor(data_2, len_2, ip_2); #ifdef __DEBUG__ printf("PID : %d \n", getpid()); #endif //signal(1024, test_sig); while(!kbhit()); sensor_close_client(); remove_semaphore(); return 0; }
PRIVATE void update_one_semaphore(struct sem_struct *sem, int is_remove) { int i, j, nr; struct semaphore *semaphore; endpoint_t who; nr = sem->semid_ds.sem_nsems; if (is_remove) { for (i = 0; i < nr; i++) { semaphore = &sem->sems[i]; for (j = 0; j < semaphore->semzcnt; j++) send_message_to_process(semaphore->zlist[j].who, EIDRM, 0); for (j = 0; j < semaphore->semncnt; j++) send_message_to_process(semaphore->nlist[j].who, EIDRM, 0); } remove_semaphore(sem); return; } for (i = 0; i < nr; i++) { semaphore = &sem->sems[i]; if (semaphore->zlist && !semaphore->semval) { /* choose one process, policy: FIFO. */ who = semaphore->zlist[0].who; memmove(semaphore->zlist, semaphore->zlist+1, sizeof(struct waiting) * (semaphore->semzcnt-1)); --semaphore->semzcnt; send_message_to_process(who, OK, 0); } if (semaphore->nlist) { for (j = 0; j < semaphore->semncnt; j++) { if (semaphore->nlist[j].val <= semaphore->semval) { semaphore->semval -= semaphore->nlist[j].val; who = semaphore->nlist[j].who; memmove(semaphore->nlist+j, semaphore->nlist+j+1, sizeof(struct waiting) * (semaphore->semncnt-j-1)); --semaphore->semncnt; send_message_to_process(who, OK, 0); /* choose only one process */ break; } } } } }
int main() { int key = 123 ; int memsize = sizeof(int) ; int shmemId = create_shmem(key, memsize) ; if (shmemId == -1) { perror("shared segment creation error") ; exit(EXIT_FAILURE) ; } int* buffer = (int*) attach_shmem(shmemId) ; *buffer = 0 ; int emptySemKey = 100 ; int emptySemId = create_semaphore(emptySemKey) ; int fullSemKey = 101 ; int fullSemId = create_semaphore(fullSemKey) ; if ((emptySemId == -1) || (fullSemId == -1)) { perror("semaphore creation error") ; exit(EXIT_FAILURE) ; } init_semaphore(fullSemId, 0) ; init_semaphore(emptySemId, 1) ; while (*buffer >= 0) { down(emptySemId) ; if (!scanf("%d", buffer)) *buffer = -1 ; up(fullSemId) ; } remove_semaphore(fullSemId) ; remove_semaphore(emptySemId) ; detach_shmem(buffer) ; remove_shmem(shmemId) ; }