如何将OS/2应用程序移植到Linux操作系统

当从 OS/2 移植到 Linux 时,关键的编程问题是什么?

在转换到 Linux 之前注意一下,提早发现陷阱。LANDP 小组带领您了解 OS/2 和 Linux 之间的差别,以便您的移植工程才能更顺利地进行。

本文是 LAN Distributed Platform(LANDP)for Linux 小组把 LANDP 从 OS/2 移植到 Linux 时所遇到的问题的概述。本文对其他正在把 OS/2 应用程序移植到 Linux 的小组应该是有帮助的。当决定了要把 OS/2 版本的 LANDP 移植到 Linux 时,小组已经有了从 OS/2 移植到 NT 的经验。NT 移植包含两个主要的途径: 映射层;抽象层。

抽象层比映射层稍简单一点儿。抽象层是薄薄的一层软件抽象,它抽象了函数名、参数以及它们的返回码,而映射层则试图模仿 OS/2 的行为。

对于 Linux 移植,我们从开发抽象层开始。抽象层将需要许多附加功能,这是早就显而易见的。抽象层发展成了映射层。映射层是一个共享对象,有一个恰似 OS/2 接口的接口并且试图模仿 OS/2 的精确行为。然而,LANDP 需要的仅是 OS/2 功能的一个子集,因此,映射层不是一个完全实现。

下面几节概述了两个操作系统在功能上大部分不同之处,并且提供了一些处理这些差别的建议。

明显的差别

系统调用是 OS/2 和 Linux 之间最明显的差别。一些调用容易被映射(例如,DosOpen),而其它的调用不容易被映射(例如,DosCreateQueue)。除了系统调用之外,返回值和返回值的含义也不同。同样,一些返回值能被精确匹配,像 File not found,但是其它的返回值需要近似匹配。

类型是另一个产生差别的地方。因为 OS/2 重新命名了 C 的类型且使用函数参数的结构,所以就产生了差别。例如,在 OS/2 上类型 UINT 被定义为无符号整数。我们必须为 Linux 环境重定义这些类型中的大多数。

操作上的差别

最主要的区别在于概念的行为,这甚至比移植系统调用和重定义类型更为重要。大多数操作系统具有相同的概念、内存、文件、进程间通信(IPC)等等。OS/2 和 NT 有非常相似的概念且它们的差别不是大范围的(除了共享内存外)。然而,Linux 和 OS/2 显示了许多概念上的差别。下面这些子节概述了这些差别,并且为处理这些差别提供了一些解决方案。

线程

Linux 环境中的线程是一个特殊类型的进程。因此,要为您使用的每个线程都创建一个新进程。而且,通过使用 clone 函数或一个叫 pthread 的单独的库来实现线程。也存在其它形式的线程,但是 pthread 是一个 POSIX 定义的标准。

因为对 Linux 而言线程是一个相对新的概念,所以这个操作系统不是和其它操作系统一样线程安全。因此,一些标准库并不是真正的线程安全。另外,线程会影响信号的行为。特定的线程将接收一个被发送到进程的信号,这个特定的线程是未知的。请注意,pthread 有它们自己在一个进程中的每个线程之间传送信号的方式。

getpid 和 getppid 的使用将受到影响。例如,一个调用 getpid 的线程,它的进程标识(不是应用程序的进程标识)将被返回,因为线程被作为进程来实现。

时间: 2016-01-13

如何将OS/2应用程序移植到Linux操作系统的相关文章

详解如何将Unix应用程序移植到Linux系统

介绍 您知道 Linux 现在已是世界第二的服务器操作系统吗?今天,您的应用程序在 Linux 上运行吗?如果不是,那么本文将给您些提示和技巧,在您把应用程序移植到 Linux 的时候为您提供指导.本文依据的是软件工程师的经验,这些工程师来自独立软件供应商(Independent Software Vendors,ISV)和全世界的 IBM 实验室,他们参与了许多把应用程序移植到 Linux 的项目. 首先我们描述 Linux 的特征和它在开发和管理应用程序中的具体价值.接着,我们将回顾重要问题

DB2 V9.5版本中数据库应用程序移植的改进

版本9.5中改进的应用程序可移植性增加了与现有代码的兼容性,并且不再需要迁移使用其他供应商的数据库的应用程序.版本9.5包含以下增强功能: 支持在过程和调用过程的应用程序中使用ARRAY数据类型. 支持全局变量.全局变量是已命名的内存变量,您可以通过SQL语句访问和修改此变量.版本9.5支持已创建的会话全局变量,这些变量与特定会话相关联并包含该会话独有的值. 支持其他供应商的 SQL 方言.版本 9.5 包含对 DECODE.NVL.LEAST 和 GREATEST 函数的支持. 数组数据类型

C程序移植到VC开发环境下

说明 本文是作者学习计算方法时所做工作的总结.我们改写了徐士良先生编著的<C常用算法程序集>(清华大学出版社出版) 数值计算部分-前15章所有程序,并全部在 VC6 + Windows2000 下调试通过.数组类和矩阵类有两个版本:封装成模板类.普通类,我个人认为后者可能更实用,但论文中以模板类形式给出. 本文已经在www.vchelp.net上发表过,该网站允许作者另投其他网站. 摘要 针对C程序的特点,给出将之移植到VC集成环境下的技术,对一个常用程序集实施了大规模的改写,并提供了C++数

OS X安装程序无法工作怎么办?

  2016年 2 月 14 日前从 Mac App Store 下载的多个版本的 OS X 系统安装程序已经无法正常工作,原因就是证书过期导致其无法通过验证.具体来说,例如你在外接驱动(如:USB 启动盘)上安装了过期的 OS X 安装程序的话,那么在安装系统的时候就会出现失败的情况.据悉,受影响的安装程序版本包括了 OS X El Capitan 和 OS X Mavericks,甚至还有 OS X Mountain Lion. OS X El Capitan 系统的安装程序可以通过从 Ma

我想要保护设备中的程序,据我了解目前有高强度加密算法保护,还有的就是程序移植,哪种方案比较好呢?

问题描述 我想要保护设备中的程序,据我了解目前有高强度加密算法保护,还有的就是程序移植,哪种方案比较好呢? 我想要保护设备中的程序,据我了解目前有高强度加密算法保护,还有的就是程序移植,哪种方案比较好呢?目前成本有限,两种都支持的话成本太高. 解决方案 推荐使用加密,程序移植我个人不大懂,我理解的程序移植要更换编程语言到其他平台上去. 解决方案二: 如果考虑成本的话那肯定是加密了 解决方案三: 1 数据加密保护:程序段A 芯片 产生随机数Rnd 加密Rnd,获得Res 认证<-------Res

在windows上可以运行的java程序移植到liunx上运行出错

问题描述 这个小程序在windows平台编译成功了.并且可以运行一部分功能,也就是说程序会执行到一定的位置然后再出错,然而到linux环境下再次运行相同的class文件时,一开始程序就崩了.下面是终端的截图:求大神给指导一下啊.另外,两个平台的JDK的版本是相同的. 还有.这程序在windows上编译时需要引入的那些包在linux上是没有的,但是这好像没有影响吧,我只是把class文件移植到linux上去了啊.是可执行文件啊. 解决方案 解决方案二:不可以的,class文件执行时依然要依赖支撑它

BtBatStat 0.4发布 一个简单的OS X应用程序

BtBatStat是一个简单的OS X应用程序,显示您的苹果蓝牙鼠标和键盘在菜单栏中的电池状态.它支持苹果BT键盘,苹果Mighty鼠标,和苹果魔术鼠标.其他设备也可以工作. BtBatStat 0.4该版本现在同时支持触控板+鼠标. 下载地址:http://code.google.com/p/btbatstat/downloads/detail?name=BtBatStat-0.4.zip

BtBatStat 0.9发布 简单的OS X应用程序

BtBatStat 0.9此版本解决了版本检查在某些情况下可能会失败的问题.解决了完全充电设备只出现了10%就提示充满的问题. BtBatStat是一个简单的OS X应用程序,用来显示菜单栏中的苹果蓝牙鼠标和键盘的电池状态.它能够支持苹果BT键盘,苹果Mighty Mouse,和苹果魔术鼠标.其他苹果的设备同样也可以支持. 下载地址:http://code.google.com/p/btbatstat/downloads/detail?name=BtBatStat-0.9.zip&can=2&am

低版本的c++程序移植到vs2010上

问题描述 低版本的c++程序移植到vs2010上 #if _WIN32_WINNT < 0x0403 #error This file requires _WIN32_WINNT to be #defined at least to 0x0403. Value 0x0501 or higher is recommended. #endif 解决方案 在stdafx.h加上#define _WIN32_WINNT 0x0501 (0501表示xp)