C ++ не поддерживает некоторые части API Linux? - PullRequest
2 голосов
/ 15 августа 2011

Я нахожусь в процессе чтения Интерфейс программирования Linux и Программирование Linux на примерах .Обе очень хорошие книги и очень хорошо объясняют Linux API.Но довольно часто я думаю, что в реальных проектах я предпочитаю стандартную библиотеку C ++, Boost или другую хорошую библиотеку C ++ (есть много хорошо написанных и переносимых библиотек C ++), когда это возможно, C API.Естественно, возникает вопрос: зачем мне использовать Linux API напрямую, если на целевых платформах есть хороший компилятор C ++ и библиотеки (Boost, TBB и т. Д.)?Думаю, то же самое можно сказать и о Windows API, но я мало что знаю о системном программировании Windows.

Ответы [ 3 ]

5 голосов
/ 15 августа 2011

Это не ново для C ++. В C было два способа долгое время открывать файлы:

// Only on POSIX
int fdes = open("file.txt", O_RDONLY);

Или:

// Any hosted C environment, POSIX or otherwise
FILE *fp = fopen("file.txt", "rb");

Так зачем кому-то использовать версию, специфичную для POSIX? Ответ прост - существует большое количество системных вызовов, которые работают с дескрипторами файлов POSIX. Например, select. Вы также можете создавать вещи, отличные от файлов, такие как каналы и сокеты, и передавать их другим процессам. Существует давняя традиция использования файловых дескрипторов POSIX, и у нас есть большое количество книг и ссылок о том, как с ними работать в сети.

Таким образом, компромисс между портативной версией и мощной версией. Так было всегда.

Другая половина этого - это то время, когда вы работаете с файлами в Linux, вы работаете с интерфейсом POSIX. Библиотеки просто скрывают это от вас. Boost использует это, среда выполнения C использует это, JRE использует это, и GHC использует это. Многие (большинство?) Языковые среды выполнения написаны на C, и прямой доступ к системным вызовам предпочтителен.

3 голосов
/ 15 августа 2011

Вы должны использовать API более высокого уровня, когда это возможно. Обычно с ним быстрее работать и легче переносить код на другую платформу. Тем не менее:

  1. Из-за закона об утечках полезно знать API операционной системы underyling, чтобы вы могли понять различные причуды и проблемы с производительностью, которые API более высокого уровня не смог скрыть.
  2. Некоторые вещи невозможно реализовать с помощью переносимого API, обычно из-за того, что в разных операционных системах он настолько различен, что сделать это нелегко.
  3. Все переносимые API имеют некоторые накладные расходы. В большом проекте он небольшой по сравнению с остальным кодом, но если вы делаете что-то маленькое, вы можете избежать этих накладных расходов, особенно если вы знаете, что в любом случае вам понадобится использовать определенный API.
0 голосов
/ 15 августа 2011

C ++ стандарт не публикуется для конкретной платформы. Он не зависит от платформы, поэтому, если вы собираетесь использовать некоторые функции / функции платформы, вам придется использовать зависящие от платформы функции / функции, обычно называемые system api. Так что в этом смысле нет, библиотека C ++ не поддерживает Linux / Windows API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...