编写Unix和Windows的应用程序

时间:2009-11-10 12:03:47

标签: c windows windows-services unix

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

我希望在移植它时尽可能少地进行更改,但要使其成为好的代码。

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

6 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

  • 提早和经常
  • 封装非可移植代码。 (不要在代码中传播太多#ifdefs - 而是在单独的源文件中为每个操作系统创建单独实现的功能。
  • 对数据类型非常严格(在结构/类中使用long short而不是int)
  • 即。打开最高警告级别并解决所有警告。

答案 2 :(得分:1)

您可以使用与平台相关的ifdef-include pragma和尽可能严格的类型。 GLib有一些很好的定义,几乎可用于所有平台或架构。

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

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

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

你仍然需要做一些#ifdefing。

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

答案 5 :(得分:0)

如果不能添加像python,ruby,perl,java等本质上可移植的东西,那么你最好的选择可能是使用ANSI C. C最初流行的一个原因是它的(相对好的)可移植性。也就是说,任何与操作系统密切相关的东西,如图形,网络等,在C语言中的可移植性都远远低于像Python这样的东西。您应该努力为操作系统特定的功能制作“包装器”,并将这些功能与主代码分开。这种方式当它被移植时,你就会重写包装器,其他一切都应该编译而没有太多问题。

所有这一切都说,用Python编写一些东西并让它在任何地方都能运行起来更容易。另外,写作更“有趣”。因此,如果您将来可以避免使用“交互式unix”,请执行此操作。