Перенос приложения с кодом C с Solaris на Linux и проблемы с заголовками в реальном времени

#qt4 #solaris #porting

#qt4 #solaris #перенос

Вопрос:

Пожалуйста, помогите, инструменты, которые я использую, — это kdevelop и qt4. На моем main.cpp есть ошибки, например;

 
Error: sys/procset.h: No such files or directory
Error: sys/priocntl.h: No such files or directory
Error: sys/tspriocntl.h: No such files or directory
Error: sys/rtpriocntl.h: No such files or directory
In function 'int main(int. char**)':
Error: 'pcparms_t' was not declared in this scope
Error: expected ';' before 'pcparms'
Error: 'rtparms_t' was not declared in this scope
Error: 'rtparmsp' was not declared in this scope
Error: 'pcinfo_t' was not declared in this scope
Error: expected ';' before 'pcinfo'
Error: 'rtinfo_t' was not declared in this scope
Error: 'rtinfop' was not declared in this scope
warning: unused variable 'lret'
warning: unused variable 'priority'
...
...
...
*Exited with Status:2 *
  

Я не могу найти эти заголовки в реальном времени в моем Centos 5 Linux. Кроме того, я не знаю эквивалентности этих заголовков для Linux. Я знаю, что мне нужно добавить инструкцию If для Solaris и Linux для заголовков include, и я не знаю, какие заголовки будут включены в инструкцию if / else.

Когда я удаляю заголовки, комментируя их заголовки реального времени и функцию для функции реального времени для solaris, я запускаю ее.

 
//pcparms_t pcparms;
//rtparms_t *rtparmsp;
//pcinfo_t pcinfo;
//rtinfo_t *rtinfop;
  

Моя проблема в том, каковы заголовки и функции в реальном времени для Linux или эквивалента Linux. Код моего приложения представляет собой смесь c и qt4. Что касается qt4, нужно ли им использовать функции реального времени? На c из Solaris нужны ли мне функции реального времени? Если да, то где я могу их найти или как они называются и где мне их разместить?

Комментарии:

1. Вы выполнили locate procset.h или find / | grep "procset.h" , чтобы узнать, где находится этот файл?

Ответ №1:

На самом деле это не вопрос, связанный с QT, а скорее вопрос о переносе Solaris-> Linux.

 sys/procset.h
sys/priocntl.h
sys/tspriocntl.h
sys/rtpriocntl.h
  

Все эти файлы являются системными вызовами, специфичными для Solaris. Они являются частью priocntlset — обобщенного управления планировщиком процессов.

Со страницы руководства

 priocntlset(2)           System Calls           priocntlset(2)

NAME
       priocntlset - generalized process scheduler control

SYNOPSIS
       #include <sys/types.h>
       #include <sys/procset.h>
       #include <sys/priocntl.h>
       #include <sys/rtpriocntl.h>
       #include <sys/tspriocntl.h>
       #include <sys/iapriocntl.h>
       #include <sys/fsspriocntl.h>
       #include <sys/fxpriocntl.h>

       long priocntlset(procset_t *psp, int cmd, /* arg */ ...);

DESCRIPTION
       The priocntlset() function changes the scheduling properties of running
       processes. priocntlset() has the same functions as the priocntl() func-
       tion,  but  a more general way of specifying the set of processes whose
       scheduling properties are to be changed.

NOTES
    Due to the lack of a priocntl() system call on Linux and FreeBSD...
  

Способ обработки процессов между Solaris и Linux отличается. Обе системы являются вариантами Unix, но конкретные системные вызовы, которые вы ищете, не имеют эквивалента Linux. В основном priocntlset используется для (повторного) планирования процессов. Я не в курсе последних версий ядра Linux или того, какие планировщики больше доступны, но в любой хорошей книге по ядру 2.6 (или 2.4) будет раздел о планировании с примерами.

Хорошим местом для начала на компьютере с Linux было бы man syscalls .