2013-02-25 2 views
0

Я хочу написать программу сокетов в Linux. Поэтому он будет использовать системные вызовы glibc, такие как socket(), bind(), listen(), write() и т. Д.Как написать мини-программу, совместимую со всеми unix-подобными системами?

Интересно, могу ли я скомпилировать его без каких-либо изменений в FreeBSD, Solaris или Mac OS? Если да, то называется ли это стандартами posix?

ответ

2

Socket(), bind(), write() - все функции Posix, и использование их сделает ваш код переносимым в широком диапазоне операционных систем POSIX.

Linux использует glibc, однако другая жалоба POSIX OS будет использовать любой другой libc, не обязательно glibc. Но все вышеперечисленные функции (системные вызовы) будут реализованы с той же сигнатурой и функциональностью, и вы сможете скомпилировать их и запустить одинаковый код везде.

http://en.wikipedia.org/wiki/Berkeley_sockets#BSD_vs_POSIX

+0

И даже на Linux вы можете использовать другие лирики libc, такие как http://musl-libc.org/, и они остаются совместимыми с Posix. –

+0

Итак, все функции в glibc реализованы во FreeBSD, а также? –

+0

Здесь есть несколько вещей: 1.Socket, bind, write - все жалости posix, поэтому означает, что libc (glibc или что-то еще), установленное на машине FREEBSD, обеспечит выполнение всех вышеперечисленных функций. – Pradheep

1

Сотовые вызовы инициируются BSD, но сегодня все Unix-подобные ОС поддерживают их. Windows также несколько поддерживает их в своем собственном вкусе (Winsock).

Я не думаю, что это часть Posix, но на самом деле вы не должны иметь проблем с переносимостью.

Btw, когда вы делаете «man 2 socket» (или любой другой вызов), он показывает полезную информацию о истории и стандартах внизу.

+0

Он говорит о вызовах сокетов, а не о pthreads; его не то же самое, – seand

+0

Существует некоторая информация о включении этих стандартов BSD в POSIX - и о том, как они немного изменились в процессе - в http://en.wikipedia.org/wiki/Berkeley_sockets. –

0

Один из самых портативных способов сделать сеть использует библиотеку Asio от повышающего:

http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio.html

Это простое в использовании и портативное и Windows, а также системы Unix/Posix (например, Linux , Mac, различные BSD и т. Д.)

+0

Привет. Например, вызовы сокетов. Я задавался вопросом, могу ли я использовать все функции glibc в других системах, а также. –

1

Все системы вы упоминаете следовать Single UNIX Specification и иметь POSIX: 2001 в качестве общего знаменателя (смотрите раздел compliance), так это то, что вы хотите настроить таргетинг.

GNU libc имеет много функций, которые не находятся в POSIX. Чтобы узнать, можете ли вы использовать определенную функцию, вы можете посмотреть раздел «СООТВЕТСТВИЕ» на соответствующей странице руководства или обратиться к руководству GNU libc. Например, мы можем видеть в сокете (2), что сокет соответствует POSIX.1-2001, поэтому вы можете его использовать.

Подробнее об этом читайте 1.2 Standards and Portability.