С какими операционными системами ты работал?

«С какими операционными системами ты работал?» — вопрос из категории Linux и ОС, который задают на 25% собеседований C/C++ Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В основном я работаю с Linux (различные дистрибутивы: Ubuntu, Fedora, CentOS) как основной платформой для разработки и развёртывания серверных приложений на C++. Для кросс-платформенной разработки и отладки также использую Windows. Имею опыт работы с QNX и FreeRTOS при разработке встраиваемых и систем реального времени.

Пример из практики (Linux): При разработке сетевого демона на C++ активно использовал системные вызовы для управления процессами и межпроцессного взаимодействия (IPC).

#include <unistd.h>
#include <sys/wait.h>
#include <iostream>
#include <cstdlib>

int main() {
    pid_t pid = fork(); // Создание дочернего процесса

    if (pid == -1) {
        std::cerr << "Fork failed!" << std::endl;
        return EXIT_FAILURE;
    }

    if (pid == 0) {
        // Код, выполняемый в дочернем процессе
        std::cout << "Child process PID: " << getpid() << std::endl;
        // Заменяем образ процесса на выполнение команды 'ls'
        execlp("/bin/ls", "ls", "-l", nullptr);
        // Если execlp вернул управление, значит, произошла ошибка
        std::cerr << "execlp failed!" << std::endl;
        exit(EXIT_FAILURE);
    } else {
        // Код, выполняемый в родительском процессе
        std::cout << "Parent process PID: " << getpid() << ", child PID: " << pid << std::endl;
        int status;
        waitpid(pid, &status, 0); // Ожидание завершения дочернего процесса
        if (WIFEXITED(status)) {
            std::cout << "Child exited with status: " << WEXITSTATUS(status) << std::endl;
        }
    }
    return EXIT_SUCCESS;
}

Работа с разными ОС научила меня учитывать особенности системных API, управление памятью и планировщики задач при написании переносимого и эффективного кода на C++.