Apo*_*o17 1 c++ linux posix solaris
我正在将旧代码从 Solaris 移植到 Linux。在一个文件中我包含:
\n#include <sys/siginfo.h>\nRun Code Online (Sandbox Code Playgroud)\n当然,我在 Linux 中找不到它了。\n所以我尝试将新的包含在:
\n#include <asm/siginfo.h>\nRun Code Online (Sandbox Code Playgroud)\n但我在尝试编译它时遇到了很多问题(当然)并且出现了如下错误:
\n\n\n/usr/include/asm-generic/siginfo.h:8:15: 错误: 重新定义 \xe2\x80\x98union sigval\xe2\x80\x99
\n
\n/usr/include/asm-generic/siginfo.h:11 :3: 错误:声明冲突 \xe2\x80\x98typedef int sigval_t\xe2\x80\x99
\n} sigval_t;
等等。\n所以我想也许我可以更加独立于操作系统并尝试直接使用标准:
\n#include <signal.h>\nRun Code Online (Sandbox Code Playgroud)\n它让以前的错误消失了。但我当然得到了:
\n\n\n错误:\xe2\x80\x98SIGLOST\xe2\x80\x99 未在此范围内声明
\n
但通过这种方式,我可以用一些新的宏替换它。\n我的问题是:将旧的 sys/siginfo.h 移植到新环境的最佳方法是什么。使用 POSIX 标准还是 asm/siginfo.h?或其他?
\n确实#include <signal.h>。如果您查看linux/siginfo.h它,它会警告您不要直接包含该文件,而是使用signal.h它。它是 POSIX 信号的公共 API。
联机帮助页显示,在 x86/ARM/大多数其他平台上,不使用 SIGLOST。您可能会碰到端口的某个部分,这比大多数端口需要付出更多的努力。您需要了解 SIGLOST 处理在您的代码中完成什么功能。特别是,如果代码实现并需要文件锁定,则存在依赖于平台的 API 和行为。在这种情况下,您可能会考虑完全重写文件锁定模块,以确保行为正确。
除非你能把它彻底删除。在花时间阅读这里之前,请确保您了解文件锁定的限制。例如,咨询锁和强制锁之间的区别(后者在 Linux 上不可靠)。
| 归档时间: |
|
| 查看次数: |
677 次 |
| 最近记录: |