В области операционных систем системные вызовы играют решающую роль в обеспечении взаимодействия между приложениями пользовательского уровня и базовым ядром. Системные вызовы позволяют программам запрашивать службы операционной системы, такие как управление файлами, управление процессами, сетевое взаимодействие и многое другое. В этой статье мы углубимся в концепцию системных вызовов, изучим их значение и предоставим примеры кода для различных распространенных системных вызовов.
Понимание системных вызовов.
Системные вызовы действуют как интерфейс между программами пользовательского уровня и ядром. Когда программе необходимо выполнить привилегированную операцию или получить доступ к ресурсу, управляемому операционной системой, она инициирует системный вызов. Системный вызов передает управление из режима пользователя в режим ядра, позволяя выполнить запрошенную операцию контролируемым и безопасным образом.
Общие системные вызовы с примерами кода:
-
Управление файлами:
- Открыть файл:
#include <fcntl.h> int fd = open("filename.txt", O_RDONLY); - Чтение из файла:
#include <unistd.h> char buffer[100]; ssize_t bytesRead = read(fd, buffer, sizeof(buffer)); - Запись в файл:
#include <unistd.h> char data[] = "Hello, World!"; ssize_t bytesWritten = write(fd, data, sizeof(data)); - Закрыть файл:
#include <unistd.h> close(fd);
- Открыть файл:
-
Управление процессом:
- Создайте новый процесс:
#include <sys/types.h> #include <unistd.h> pid_t pid = fork(); if (pid == 0) { // Child process } else if (pid > 0) { // Parent process } else { // Error occurred } - Завершить текущий процесс:
#include <unistd.h> exit(0);
- Создайте новый процесс:
-
Управление памятью:
- Выделить память:
#include <sys/types.h> #include <sys/mman.h> void* addr = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); - Свободной памяти:
#include <sys/types.h> #include <sys/mman.h> munmap(addr, 4096);
- Выделить память:
-
Сетевое общение:
- Создайте сокет:
#include <sys/types.h> #include <sys/socket.h> int sockfd = socket(AF_INET, SOCK_STREAM, 0); - Установить соединение:
#include <sys/types.h> #include <sys/socket.h> struct sockaddr_in serverAddress; // Set serverAddress with the appropriate values connect(sockfd, (struct sockaddr *)&serverAddress, sizeof(serverAddress));
- Создайте сокет: