Ada POSIX 绑定和几套 IPC 的 POSIX 接口

Gne*_*nte 6 linux posix solaris ada sysv-ipc

我正在研究标准的Ada POSIX 绑定,以及GNAT的Florist实现。目的是评估遗留应用程序是否可以从它自己使用的 C POSIX 函数的编译指示导入移植到使用标准绑定。最终目标是能够在不更改源代码的情况下在 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,我应该考虑哪些行为差异以防止任何回归?你会建议反对吗?

Gne*_*nte 0

我做了一些研究,找到了ISO 工作组专门针对 Ada 的两份相关文档。在将 Ada POSIX Bindings IS 14519:2001 更新为 POSIX Draft IS 9945:2008 和 Ada 2005 的初始工作范围摘要文档中,列出了 Ada 标准当前不支持的 POSIX 函数作为可能的扩展。其中提到了 XSI 函数(又名 SysV IPC)。所以目前不支持它们。

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