Как Linux, так и пользовательское пространство GNU (glibc), похоже, имеют множество ошибок «WONTFIX», то есть ошибок, которые ответственные стороны заявили о своем нежелании исправлять, несмотря на явно нарушающие требования ISO C и/или POSIX, m не знают о каком-либо ресурсе для программистов, в котором перечислены такие ошибки и предложения по работе с ними.Какие ошибки WONTFIX на GNU/Linux и как их обойти?
Вот несколько, которые приходят на ум:
- The Linux UDP
select
ошибка:select
(и связанные с ними интерфейсы) Пометка UDP дескриптор сокета файл, готовый для чтения, как только пакет был получен, без подтверждающий контрольную сумму. При последующихrecv
/read
/и т. Д., Если контрольная сумма была недействительной, вызов блокируется. Для этого необходимо всегда устанавливать UDP-сокеты в неблокирующий режим и работать с условиемEWOULDBLOCK
. Если я правильно помню, MaraDNS был первым заметным проектом, затронутым этой ошибкой, и первым пожаловал (безуспешно), чтобы он исправил. Примечание: Как указывал Мартин против Лёвиса, эта ошибка с тех пор была исправлена. Обходные пути, вероятно, необходимы только в том случае, если вам необходимо поддерживать действительно устаревшие версии Linux. - Семейство
printf
в библиотеке GNU C ошибочно обрабатывает аргументы%s
как многобайтовые символьные строки вместо байтовых строк, когда задана точность поля (как в%.3s
), что потенциально вызывает усеченный вывод. Я не знаю обходного пути, кроме замены всей подсистемыprintf
(или просто не использующей семейство функцийprintf
с строками байтов без мультибайтовых символов, но это может быть проблематично, если вы хотите обрабатывать строки устаревшей кодовой страницы, используяsnprintf
, в то время как в UTF -8). -
Неправильный код(я не могу найти ссылки на это и, возможно, я ошибаюсь Ближайший я могу найти вопросerrno
для некоторых системных вызовов (не помню, какие из них сразу). Обычно их достаточно просто проверить, если вы просто прочитали справочные страницы GNU/Linux и сравните их со стандартом.ENOTSUP
иEOPNOTSUP
, имеющих одинаковое значение, см. PDTR 24715
Что еще некоторые ошибки и обходные пути мы можем. ? добавить к этому списку Моих целей, задавая этот вопрос, являются:
- чтобы построить более полный список таких ошибок, так как новые, так и опытные программисты могут быстро стать известны о возможных проблемах, которые могут возникнуть при запуске intended- to-be-portable на GNU/Linux.
- Чтобы использовать коллективный мозг SO, чтобы придумать умные и ненавязчивые стандартные обходные пути для как можно большего числа таких ошибок, вместо того, чтобы каждый мог изобрести свои собственные методы обхода после того, как их ужалили, и, возможно, сделать это в субоптимальных, уродливых или хакерских способах - или еще хуже, тем, что нарушает поддержку более совместимых систем.
Кто бы ни проголосовал за закрытие, объясните, пожалуйста. Я не вижу, как это может быть не по теме, поскольку я спросил об обходных решениях, которые явно являются темами программирования. Я признаю, что это мягко аргументированно, что было бы отдельной причиной для предложения закрытия, но если фокус - это конструктивный поиск решений, которые занимаются этими проблемами ненавязчивыми способами, а не просто виноватым, я думаю, что это стоящий вопрос. – 2010-12-07 20:59:31
Какие ошибки? Если Linux не соответствует стандартам, то, очевидно, это стандарт. – 2010-12-07 21:01:40
@R .. - просто шучу. но не удивляйтесь, если есть люди, которые действительно так думают. И для чего это стоит - я думаю, это хороший вопрос. – 2010-12-07 21:02:14