Назад к вопросам
Junior — Middle
105
Какими способами процессы могут обмениваться данными и координировать свои действия?
Компании, где спрашивали
А-стор
Ответ от нейросети
sobes.tech AI
Процессы могут обмениваться данными и координировать свои действия следующими способами:
- Файлы — процессы записывают данные в общий файл, другой процесс читает их.
- Каналы (pipes) — односторонний или двусторонний поток данных между процессами.
- Сокеты — сетевые соединения, позволяющие обмениваться данными даже между процессами на разных машинах.
- Общая память (shared memory) — выделяется область памяти, доступная нескольким процессам для быстрого обмена данными.
- Семафоры — используются для синхронизации доступа к общим ресурсам, предотвращая гонки.
- Сообщения (message queues) — процессы отправляют и получают структурированные сообщения через очередь.
- Сигналы — асинхронные уведомления о событиях, например, завершение работы или прерывание.
Пример использования 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;
}