我正在查看标准的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,我应该考虑哪些行为差异以防止任何回归?你会建议反对吗?