Начните разработку системы Linux за три минуты

Linux

Системное программирование Linux, в основном с использованием языка C, C++ является расширенным набором C, также возможно

Полный код кейса выложен на github:GitHub.com/аккуратная жизнь/нет…

Получить доступные среды

Вы можете использовать виртуальную машину для установки системы Linux для разработки системы Linux.Хотя mac os очень похожа на Linux, все же есть много небольших отличий от Linux.Установка виртуальной машины является наиболее беспроблемной. Здесь используется elementary os, а адрес загрузки указан для справки:elementary.io/zh_CN/

При установке выберите версию ядра выше linux 4.x

Эффект интерфейса следующий:

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

Стандартная библиотека языка C

Стандартная библиотека включает следующие библиотеки

  • assert.h
  • ctype.h
  • errno.h
  • float.h
  • limits.h
  • locale.h
  • math.h
  • setjmp.h
  • signal.h
  • stdarg.h
  • stddef.h
  • stdio.h
  • stdlib.h
  • string.h
  • time.h

c标准库
Эти библиотеки обычно содержат некоторые структуры и несколько функций, среди которых наиболее часто используется библиотека ввода и вывода stdio.h, библиотека общих функций (malloc, free и т. д.) stdlib.h, библиотека обработки строк string.h.

Библиотека потоков pthread.h поддерживает linux по умолчанию, а windows необходимо установить дополнительно, см.:источник forge.net/projects/common…

Процесс создает уничтожение (форк, ожидание) и т. д. в библиотеке unistd.h, поддержка linux по умолчанию

Пример - замена обработки сигнала

Выполнение сочетания клавиш Ctrl + C в запущенной программе по умолчанию прервет выполнение программы и приведет к выходу программы.

#include <stdio.h>
#include <signal.h>

int
main(int argc, char *argv[])
{
    printf("Hello World!");
    sleep(300);
}

Эффект следующий

Видно, что при нажатии ctrl c программа немедленно завершает работу, потому что терминал оболочки посылает программе сигнал SIGINT при нажатии ctrl c. Обработка сигнала SIGINT по умолчанию заключается в прекращении работы программы. Вы можете зарегистрировать новый обработчик сигнала SIGINT с помощью функции signal в библиотеке signal.h, чтобы заменить поведение по умолчанию. Например, при получении SIGINT просто напечатайте строку

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>

static void
mySigHandler(int sig)
{
    printf("in signal handler\n");
}

int
main(int argc, char *argv[])
{
    if (signal(SIGINT, mySigHandler) == SIG_ERR) {
        printf("替换信号处理器异常\n");
        exit(1);
    }

    printf("Hello World!\n");

    while (1) {
        sleep(300);
    }
}

Эффект следующий

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

Вы также можете использовать команду kill для отправки сигнала SIGINT в программу, а определение здравого смысла SIGINT находится в заголовочном файле signum-generic.h.

Соответствующее число — 2, а соответствующая команда kill — идентификатор процесса kill -2.
Вы можете видеть, что сигнал SIGINT передается процессу через инструмент уничтожения.

некоторые замечания

Когда программе отправляется сигнал SIGINT, программа выходит из спящего режима и может продолжать работу в бесконечном цикле.

while (1) {
    sleep(300);
}

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

gsettings reset org.gnome.desktop.interface monospace-font-name
gsettings set org.gnome.desktop.interface cursor-blink false
gsettings set io.elementary.files.preferences single-click false

Заменен сигнал SIGINT, а ctrl c не может завершить программу. Для завершения можно использовать сигнал SIGKILL (код 9), то есть kill -9 pid. Функцию обработки сигнала SIGKILL заменить нельзя, поэтому используйте ее с уверенностью.

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

использованная литература

  1. blog.CSDN.net/U012422855/…