Руководство программиста для Linux


Введение


Перенос UNIX-приложений под Linux удивительно легок. Linux и его GNU Си библиотека разработана для приложений, переносимых по замыслу; это означает что многие программы компилируются просто через make. Речь идет обо всех программах, не обращающихся к каким-то туманным возможностям частной реализации, или сильно завязанных на недокументированном или неопределенном поведении, или, скажем, особенном системном вызове.

Linux часто не согласуется со стандартом IEEE Std 1003.1-1988 (POSIX.1), но это никак не сертифицировано. Linux позаимствовал много хорошего от SVID и BSD ветвей UNIX, но опять же не подражал им во всех возможных случаях. Проще говоря, Linux разработан чтобы быть совместимым с другими реализациями UNIX, сделать прикладные программы легко переносимыми, и в ряде случаев продвинут благодаря отобранным лучшим идеям из этих реализаций.

Например, аргумент timeout, посылаемый системному вызову select, на самом деле уменьшается Linux-ом во время опроса. Другие реализации не изменяют это значение вовсе, и программа, скомпилированная под Linux-ом может сломаться. Руководства SunOS и BSD говорят, что модифицируемость указателя timeout - дело "будущих реализаций". К сожалению, многие приложения до сих пор предполагают, что timeout неприкосновенен.

Цель этой главы - сделать обзор основных вещей, связанных с переносом приложений в Linux, освещая различия между Linux, POSIX.1, SVID и BSD в следующих областях: обработка сигналов, ввод/вывод с терминала, управление процессами и сбор информации и переносимая условная компиляция.




Начало  Назад  Вперед