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){
33 * \brief Setup initial environment.
35 void setup_environment(){
36 /*struktura pro signal handler*/
37 struct sigaction sighnd;
39 if (mlockall(MCL_FUTURE | MCL_CURRENT) < 0) {
40 fprintf(stderr, "mlockall failed - cannot lock application in memory\n");
46 /*nastaveni signalu pro vypnuti pomoci Ctrl+C*/
47 sighnd.sa_handler=appl_sig_handler;
48 sigaction(SIGINT, &sighnd, NULL );
55 int create_rt_task(pthread_t *thread, int prio, void *(*start_routine) (void *), void *arg){
59 struct sched_param schparam;
61 /*inicializace implicitnich atributu*/
62 if (pthread_attr_init(&attr) != 0) {
63 fprintf(stderr, "pthread_attr_init failed\n");
67 /*nastavi dedeni planovace z attr*/
68 if (pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED) != 0) {
69 fprintf(stderr, "pthread_attr_setinheritsched failed\n");
73 /*nastaveni planovace*/
74 if (pthread_attr_setschedpolicy(&attr, SCHED_FIFO) != 0) {
75 fprintf(stderr, "pthread_attr_setschedpolicy SCHED_FIFO failed\n");
79 schparam.sched_priority = prio;
81 /*nastavit atribut attr podle hodnoty schparam*/
82 if (pthread_attr_setschedparam(&attr, &schparam) != 0) {
83 fprintf(stderr, "pthread_attr_setschedparam failed\n");
88 ret = pthread_create(thread, &attr, start_routine, arg);
90 /*uvolni strukturu, nema vliv na vlakna jiz vytvorena*/
91 pthread_attr_destroy(&attr);