2012-01-26 2 views
1

Я изучаю (только что закончил) C + Алгоритмы и я новичок. Я хотел знать, используется ли POSIX Linux API на Mac. Linux имеет такие функции, как pread pwrite readv writev nftw symlink pipe popen posix_self sigprocmask sigaction (системные вызовы). Есть ли у Mac тот же API? Я слышал, что OS-X основан на ядре BSD, поэтому мне было интересно, могу ли я использовать код, написанный на Linux на OS-X, если бы я придерживался только функций POSIX. Насколько похож API OS-X на Linux POSIX/SUSv3 API?Программирование MacOS-X и Linux API - совместим с POSIX?

+0

Обратите внимание, что OSX сертифицирован Unix. Linux нет. Корни BSD находятся в Unix. – Rob

ответ

0

The Wikipedia article on POSIX имеет раздел, посвященный соблюдению. Короткий ответ: да, у него будет все возможности POSIX, с которыми вы, вероятно, столкнетесь. И, вероятно, будет больше (например, много BSD-apis, которое на самом деле не может быть POSIX)

+0

Итак, если оба linux и mac os x совместимы с posix, почему они двоичные несовместимы? Должны ли программы терминалов linux работать на Mac тогда? – poitroae

+0

№ POSIX - это [API] (http://en.wikipedia.org/wiki/API), но для их работы в обеих операционных системах они также должны иметь одинаковый [ABI] (http: // ru. wikipedia.org/wiki/Application_binary_interface), чего нет у Mac и Linux. –

0

Если вы спрашиваете, можете ли вы писать код, который работает на обеих платформах, то да. Если вы спрашиваете, так ли легко, ответ, вероятно, нет.

POSIX не является стандартом Linux, но Linux следует за ним, а также OSX, BSD, HPUX, Solaris и даже некоторыми операционными системами реального времени, такими как QNX (только для обозначения нескольких).

Если вы запрограммируете API POSIX как можно больше, портирование кода будет намного проще.

0

Это закрыть. Есть некоторые вещи BSD, которых вы не найдете в Linux, и некоторые вещи Linux, которые вы не найдете в BSD. Вы почти всегда можете ограничить себя подмножеством, совместимым с обеими платформами, без особых проблем. API-интерфейсы POSIX, которые не являются переносимыми, часто имеют обозначение _np. Вы также обнаружите, что некоторые вещи еще не поддерживаются на одной платформе. В более установленных API-интерфейсах существует безопасная промежуточная площадка. И это, конечно, может варьироваться в зависимости от того, какие версии ОС вы нацеливаете. Реализации могут немного отличаться, если вы блуждаете по менее распространенным API. Моя первая остановка - проверить страницы man.

+0

будет работать _BSD_SOURCE (макрос теста функции)? разве это не должно допускать определения, которые делают ваш код более BSD-ish ?? –

+0

Долгое время OS X была «BSD-like». с 10.5 + Intel, он формально совместим с UNIX - http://en.wikipedia.org/wiki/UNIX_03. Моя рекомендация - использовать API-интерфейсы, которые совместимы со всеми вами целевыми системами (где это возможно) - просто ограничьте то, что вы используете для этого подмножества. x-plat-программы становятся намного сложнее, когда вы отклоняетесь и начинаете внедрять эти API для одной системы. Если я найду BSD-расширения в источнике при создании на Linux, я просто изменяю программу, чтобы использовать доступные API для обоих. OS X - Дарвин, что усложняет ситуацию. – justin

Смежные вопросы