Системные вызовы и функции стандартных библиотек

Все версии UNIX предоставляют строго определенный ограниченный набор входов в ядро ОС, через которые прикладные задачи имеют возможность воспользоваться услугами, предоставляемыми ОС UNIX. Эти точки входа называются системными вызовами. Системный вызов определяет функцию, выполняемую ядром ОС от имени процесса, выполнившего вызов и является интерфейсом самого низкого уровня взаимодействия прикладных процессов с ядром. Современные ОС UNIX имеют более 100 системных вызовов. В среде программирования ОС UNIX системные вызовы определяются как функции языка C, независимо от фактической реализации вызова функции ядра ОС. В UNIX каждый системный вызов имеет соответствующую функцию или функции, с тем же именем, хранящуюся в стандартной библиотеке языка C.

Функции библиотеки выполняют необходимые преобразования элементов и вызывают требуемую процедуру ядра, используя различные приемы. В этом случае библиотечный код выполняет роль оболочки, а фактические инструкции располагаются в ядре операционной системы.

#include <stdio.h>

#include <time.h>

int main (void) {

time_t nt = time (NULL);

printf (“%s”, ctime (&nt));

return (0);

}

В тексте программы важную роль играют заголовки файлов. Они содержат описания системных вызовов, библиотечных функций, типов данных, констант, которые могут быть использованы в программе. Большинство файлов содержится в каталогах

/usr/include

/usr/include/sys

Пример компиляции и выполнения программы:

>gcc prog1.c <Enter>

>./a.out <Enter>

Или

>gcc prog1.c –o prog1.exe // -o указывает имя исполняемого файла, в

который будет скомпилирована программа

>./prog1.exe

В результате работы компилятора получаются объектные модули, которые можно объединить в один исполняемый файл.

file1.h:

void print_up (const char * str)

file2.c:

#include <ctype.h>

#include <stdio.h>

#include <string.h>

void print_up (const char * str) {

int i;

for (i=0; i<strlen(str); i++)

printf (“%c”, toupper (str[i]));

printf (“\n”);

}

main.c:

#include <stdio.h>

#include <string.h>

#include “file1.h”

int main (int argc, char ** argv) {

if (argc < 2) {

printf (“Ошибка задания аргументов\n”);

return (-1);

}

print_up (argv[1]);

return (0);

}

Назначение: преобразование строчных букв в прописные.

>gcc –c file2.c <Enter>

>gcc –c main.c <Enter>

>gcc –o printup file2.o main.o <Enter>



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: