Linux和GNU用户空间(glibc)似乎存在一些“WONTFIX”错误,即尽管明显违反ISO C和/或POSIX的要求,负责方宣布不愿意修复这些错误。但我不知道有哪些资源为程序员列出这些错误和解决建议。
以下是我能想到的几个:
- Linux UDP
select
错误:在未确认校验和的情况下,select
(以及相关接口)会标记UDP套接字文件描述符已准备好读取,只要收到数据包就会立即发生。在后续的recv
/read
/等调用中,如果校验和无效,则调用将阻塞。解决此问题需要始终将UDP套接字设置为非阻塞模式,并处理EWOULDBLOCK
条件。如果我没记错,MaraDNS是最早受到此bug影响并且第一个抱怨(未成功)要求修复它的知名项目。注意:正如Martin v. Löwis指出的那样,显然这个bug已经被修复了。只有当您需要支持真正过时的Linux版本时才需要工作区。 - GNU C库中的
printf
系列错误:当指定了字段精度(如%.3s
)时,printf
系列在处理%s
参数时错误地将其视为多字节字符字符串而不是字节字符串,可能会导致截断的输出。我不知道除了替换整个printf
子系统之外是否有解决方法(或者只是不使用带有非多字节字符字节字符串的printf
函数族,但如果要在UTF-8语言环境中处理遗留代码页字符串,这可能会有问题)。
errno
结果代码不正确(我记不清是哪些了)。如果您只阅读GNU / Linux man页面并将其与标准进行比较,通常很容易检查这些内容。ENOTSUP
和EOPNOTSUP
具有相同的值; 请参见PDTR 24715。)还有哪些错误和解决方法可以添加到这个列表中? 我提问的目的是:
- 构建更完整的此类错误列表,以便新手和经验丰富的程序员都能快速了解在GNU / Linux上运行预期可移植程序时可能出现的潜在问题。
- 利用SO集体智慧,想出尽可能多此类错误的 clever 和无障碍标准解决方法,而不是每个人在被刺伤后都必须发明自己的解决方法,并可能以次优,丑陋或hackish的方式实现 - 更糟糕的是,以破坏对更符合规范的系统的支持的方式实现。