6

我正在查看标准的Ada POSIX 绑定和 GNAT 的Florist实现。目的是评估是否可以将遗留应用程序从其使用 C POSIX 函数的 pragma Import 移植到使用标准绑定。最终目标是能够在不更改源代码的情况下在 Solaris 和 Linux 中重新编译应用程序。我怀疑 UNIX 传统中用于进程间通信功能的几组接口,如信号量、消息队列等。 Florist 正在导入这些 C 函数:

  • 信号量: sem_init sem_destroy sem_open sem_close sem_unlink sem_wait sem_trywait sem_post sem_getvalue
  • 消息队列: mq_close mq_getattr mq_notify mq_open mq_receive mq_send mq_setattr mq_unlink

当应用程序导入这些其他集合时: - 信号量:semget semop semctl - 消息队列:msgctl msgrcv msgsnd

一些来源将应用程序使用的集合定义为 System V 而不是 POSIX,而在其他来源中,它们被声明为由IEEE Std 1003.1-2001 标准化,这显然是 POSIX。

我的问题是:

  • “System V”集真的被 POSIX 标准化了吗?
  • 如果它们是 POSIX,为什么标准的 Ada POSIX 绑定不提供对它们的绑定?它们是否比其他接口“更少 POSIX”?
  • 如果我决定将应用程序移植到 Florist,我应该考虑哪些行为差异以防止任何回归?你会建议反对吗?
4

3 回答 3

0

在 ASE 集合中,有两个 POSIX 绑定。 Posix1Posix2是链接的;但是,值得注意的是 ASE 集合是在 2000 年之前出现的,因此不会有这些修订。

于 2020-01-14T23:13:05.143 回答
0

我进行了一些研究,并从致力于 Ada 的 ISO 工作组中找到了两份相关文件。在文档Initial Work Scope Summary for update Ada POSIX Bindings IS 14519:2001 到 POSIX Draft IS 9945:2008 和 Ada 2005中有一个 Ada 标准当前不支持的 POSIX 函数列表作为可能的扩展。那里提到了 XSI 函数(又名 SysV IPC)。所以目前不支持它们。

但它们不会在不久的将来出现,因为文件草案纪要,会议 #64指出更新工作已被取消。所以用户应该继续为那些 POSIX C 函数制作我们自己的接口,我猜。

于 2020-01-19T20:41:35.973 回答
0

西班牙坎塔布里亚大学与 Ada 和 POSIX 合作已有 20 多年:也许看看他们的工作会有回报;例如: https ://ocw.unican.es/pluginfile.php/1398/course/section/1781/Tema%2007%20-%20Ada.pdf

于 2020-12-14T09:33:38.203 回答