将C ++代码应用程序从Solaris移植到Linux以及实时标头问题

时间:2011-05-11 16:47:04

标签: qt4 solaris porting

请帮忙,我使用的工具是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的上述标题的等价性。我知道我必须为Solaris和Linux添加一个包含头文件的If语句,我不知道if / else语句中将包含哪些头文件。

当我通过将实时标题和函数注释掉来删除标题时,我会让它运行。


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

我的问题是什么是Linux的实时标题和功能或等同于Linux。我的应用程序代码是c ++和qt4之间的混合。在qt4方面他们是否需要使用实时功能?在Solaris上的c ++中我需要实时函数吗?如果是,我在哪里可以找到它们或者它们叫什么,我在哪里放置它们?

1 个答案:

答案 0 :(得分: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