Sobes.tech
Назад к вопросам
Junior — Middle
105

Какими способами процессы могут обмениваться данными и координировать свои действия?

Компании, где спрашивали
А-стор

Ответ от нейросети

sobes.tech AI

Процессы могут обмениваться данными и координировать свои действия следующими способами:

  1. Файлы — процессы записывают данные в общий файл, другой процесс читает их.
  2. Каналы (pipes) — односторонний или двусторонний поток данных между процессами.
  3. Сокеты — сетевые соединения, позволяющие обмениваться данными даже между процессами на разных машинах.
  4. Общая память (shared memory) — выделяется область памяти, доступная нескольким процессам для быстрого обмена данными.
  5. Семафоры — используются для синхронизации доступа к общим ресурсам, предотвращая гонки.
  6. Сообщения (message queues) — процессы отправляют и получают структурированные сообщения через очередь.
  7. Сигналы — асинхронные уведомления о событиях, например, завершение работы или прерывание.

Пример использования pipe в C:

#include <unistd.h>
#include <stdio.h>
#include <string.h>

int main() {
    int fd[2];
    pipe(fd);
    if (fork() == 0) {
        // Дочерний процесс
        close(fd[0]);
        char msg[] = "Привет от дочернего процесса!";
        write(fd[1], msg, strlen(msg));
        close(fd[1]);
    } else {
        // Родительский процесс
        close(fd[1]);
        char buffer[100];
        int n = read(fd[0], buffer, sizeof(buffer)-1);
        buffer[n] = '\0';
        printf("Получено: %s\n", buffer);
        close(fd[0]);
    }
    return 0;
}