2 * \brief Implementace pomocnych funkci.
5 * \author Martin Prudek
7 * Implementace pomocnych funkci.
8 * Vetsinou pro komunikaci mezi vlakny, jejich sychronizaci a predavani priorit.
13 #include <signal.h> /*signal handler*/
15 #include <stdio.h> /*printf*/
17 #include <sys/mman.h> /*mlockall*/
27 void appl_sig_handler(int sig){
28 exit(0); /*atexit is set*/
32 * \brief Setup initial environment.
34 void setup_environment(){
35 /*struktura pro signal handler*/
36 struct sigaction sighnd;
38 if (mlockall(MCL_FUTURE | MCL_CURRENT) < 0) {
39 fprintf(stderr, "mlockall failed - cannot lock application in memory\n");
45 /*nastaveni signalu pro vypnuti pomoci Ctrl+C*/
46 sighnd.sa_handler=appl_sig_handler;
47 sigaction(SIGINT, &sighnd, NULL );
54 int create_rt_task(pthread_t *thread, int prio, void *(*start_routine) (void *), void *arg){
58 struct sched_param schparam;
60 /*inicializace implicitnich atributu*/
61 if (pthread_attr_init(&attr) != 0) {
62 fprintf(stderr, "pthread_attr_init failed\n");
66 /*nastavi dedeni planovace z attr*/
67 if (pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED) != 0) {
68 fprintf(stderr, "pthread_attr_setinheritsched failed\n");
72 /*nastaveni planovace*/
73 if (pthread_attr_setschedpolicy(&attr, SCHED_FIFO) != 0) {
74 fprintf(stderr, "pthread_attr_setschedpolicy SCHED_FIFO failed\n");
78 schparam.sched_priority = prio;
80 /*nastavit atribut attr podle hodnoty schparam*/
81 if (pthread_attr_setschedparam(&attr, &schparam) != 0) {
82 fprintf(stderr, "pthread_attr_setschedparam failed\n");
87 ret = pthread_create(thread, &attr, start_routine, arg);
89 /*uvolni strukturu, nema vliv na vlakna jiz vytvorena*/
90 pthread_attr_destroy(&attr);