【问题标题】:Writing application for both Unix and Windows为 Unix 和 Windows 编写应用程序
【发布时间】:2009-11-10 12:03:47
【问题描述】:

我将为交互式 UNIX 编写一个程序 (http://en.wikipedia.org/wiki/INTERACTIVE_UNIX)。但一年后它将被移植到 Windows。我将用 ANSI C 和/或 SH 脚本编写它。当它在 Windows 上运行时,它将作为 Windows 服务运行。如何让我尽可能轻松?

我想在移植时尽可能少地改变它,但要让它成为好的代码。

不幸的是,Interactive Unix 是一个旧系统,唯一存在的 shell 是 /bin/sh

【问题讨论】:

  • 你能澄清一下...它将在 unix 上是交互式的,但在 windows 上是一个服务?
  • 它也将是 Unix 上的一项服务。它运行的系统是 Interactive Unix (en.wikipedia.org/wiki/INTERACTIVE_UNIX)

标签: c windows windows-services unix


【解决方案1】:

如果您甚至考虑在 SH 脚本中执行此操作,那么您应该认真考虑已经可移植的 Python。

【讨论】:

  • 不幸的是,Interactive Unix 是一个旧系统,唯一存在的 shell 是 /bin/sh。
【解决方案2】:
  • 尽早且频繁地移植
  • 封装不可移植的代码。 (不要在您的代码中散布过多的#ifdef - 而是在单独的源文件中为每个操作系统创建单独实现的函数。
  • 对数据类型非常严格(在结构/类中使用 long short 而不是 int)
  • 即开启最高警告级别并解决所有警告。

【讨论】:

    【解决方案3】:

    您可以使用平台相关的 ifdef-include 编译指示和尽可能严格的类型。 GLib 定义了一些很好的定义,可以在几乎所有平台或架构上使用。

    仅 shell 脚本选项不是一个可行的替代方案,因为在 Windows 平台上,默认情况下没有 Bourne shell、Bash 或 KSH,不幸的是 PowerShell 在 XP 机器上似乎很少见。但是您可以同时创建传统的批处理文件和 Bourne shell 脚本。

    但正如其他人所说,如果您使用独立于平台的高级语言会更容易。你为什么不呢? :)

    【讨论】:

    • 不幸的是,Interactive Unix 是一个旧系统,唯一存在的 shell 是 /bin/sh。
    • 嗯,这看起来很有趣 :) 如果你是在 Bash 上长大的,请小心原来的 Bourne shell,它只有一些非常基本的功能。
    【解决方案4】:

    我建议使用 ANSI-C 和 Lua(一种可嵌入的小型脚本解释器)。尝试将其与您需要的基本 C 函数一起使用。

    您需要经常移植和测试。如果您在 unix 上工作了一年,然后尝试切换它会更加困难,因为通常最好的移植解决方案是在所有平台上实现的不同设计。

    【讨论】:

      【解决方案5】:

      Windows 不能直接运行 sh 脚本,你需要使用 cygwin。所以如果你真的想在 vanilla Windows 上运行,你最好使用 C。坚持 C89 并小心。如果您使用任何系统调用,请坚持使用 POSIX 系统调用,您应该在 Windows 上找到它们或等效的。 Windows 也有一个非常全面的 Berkeley 套接字类库,因此您也可以在合理范围内使用它。

      你仍然需要做一些#ifdefing。

      如果你把它变成一个 Windows 任务,你最终会用 MinGW 编译它,如果你在 UNIX 巢穴中走得太远,你将不得不把它变成一个 cygwin 二进制文件,它有一些与之相关的包袱。

      【讨论】:

        【解决方案6】:

        如果不能选择添加一些本质上可移植的东西,如 python、ruby、perl、java 等,那么最好的选择可能是使用 ANSI C。C 最初流行的一个原因是它(相对较好的)可移植性.也就是说,任何与操作系统密切相关的东西,例如图形、网络等,在 C 中的可移植性都比在 Python 中要小得多。您应该努力为操作系统特定功能制作“包装器”,并将这些功能与主代码分开。这样,当需要将其移植过来时,您正在重写包装器,并且其他所有内容都应该可以编译而不会出现很多问题。

        总而言之,用 Python 编写一些东西并让它在任何地方都能工作要容易得多。另外,写作更“有趣”。因此,如果您将来可以避免“交互式 unix”,那就这样做吧。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-12-20
          • 2017-05-05
          • 1970-01-01
          • 1970-01-01
          • 2014-07-29
          • 2013-02-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多