Функции, примеры программ и библиотеки
В данном разделе объясняется, что такое функции, как их использовать, и где они хранятся.
Для экономии памяти и более эффективной компоновки программ функции хранятся в виде библиотек. Библиотека - это файл данных, содержащий копии отдельных файлов и управляющую информацию, которая позволяет получать доступ к отдельным файлам. Библиотеки располагаются в каталогах /usr/ccs/lib и /usr/lib. По общепринятому соглашению имена большинства из них задаются в виде libимя.a, где имя задает конкретную библиотеку.
Все директивы включения файлов должны задаваться в начале первого компилируемого файла, обычно в разделе объявлений перед main( ), и до использования библиотечных функций. Например, для включения файла stdio.h используйте следующую директиву:
#include <stdio.h>Для вызова стандартных функций языка C из библиотеки libc.a не нужно выполнять никаких специальных действий. Команда cc автоматически находит эту библиотеку для функций, вызываемых в данной программе. Однако если вы вызываете функцию из другой библиотеки, необходимо сообщить компилятору имя этой библиотеки. Если в вашей программе используются функции из библиотеки libимя.a, то компилируйте программу с флагом -lимя (L в нижнем регистре). Для компиляции программы myprog.c, в которой используются функции из библиотеки libdbm.a необходимо ввести команду
cc myprog.c -ldbmМожно задать несколько флагов -l (L в нижнем регистре). Флаги обрабатываются в том порядке, в котором указаны.
Если вы планируете использовать функцию из библиотеки Berkeley Compatibility Library, то необходимо сначала подключить библиотеку libbsd.a, и только потом - библиотеку libc.a, как показано в следующем примере:
cc myprog.c -lbsdПри возникновении ошибки большинство функций возвращают значение -1 и записывают код ошибки во внешнюю переменную errno. Переменная errno объявляется в файле sys/errno.h, кроме того, в этом файле определяются константы для всех возможных исключительных ситуаций.
В данном руководстве все системные вызовы описываются как функции; предполагается, что они хранятся в библиотеке libc.a. Программный интерфейс системных вызовов аналогичен интерфейсу функций. В программах на языке С системный вызов - это просто вызов функции. Реальное различие между системным вызовом и функцией заключается в типе выполняемой ими операции. Когда программа выполняет системный вызов, переключается режим защиты домена, и вызываемая процедура получает доступ к специальной информации ядра операционной системы. При этом процедура работает в режиме ядра и выполняет задачу вместо программы. Таким образом, доступ к специальной системной информации разрешен ограниченному набору предопределенных процедур, действиями которых можно управлять.
- Ниже приведен список устаревших функций wString 64-разрядной библиотеки
libc.a. Здесь же приводятся соответствующие функции
64-разрядной библиотеки libc.a. Список функций
32-разрядной библиотеки libc.a приведен в
описании функции wstring.
32-разрядная 64-разрядная wstrcat wcscat wstrchr wcschr wstrcmp wcscoll wstrcpy wcscpy wstrcspn wcscspn wstrdup Недоступна и не имеет аналогов в 64-разрядной libc.a wstrlen wcslen wstrncat wcsncat wstrncpy wcsncpy wstrpbrk wcspbrk wstrrchr wcsrchr wstrspn wcsspn wstrtok wcstok - В начале любой программы, работающей с многобайтовыми, широкими или определяемыми локалью символами, должна вызываться функция setlocale.
- Для того чтобы обеспечить целостность данных, при создании программ с несколькими нитями следует применять реентерабельные функции.