Программы
Первая реальная утилита

Первая реальная утилита

Вы когда-нибудь писали код командной строки? А из чего она состоит? А поковыряемся чутка!

Ещё до было немного информации

Пишите программы, которые делают что-то одно и делают это хорошо.

Дуг Макилрой, изобретатель каналов Unix

От слов к делу! И начнём мы с написания вполне реальной полноценной утилиты, которая есть в Linux / MacOS / FreeBSD. В общем, пишем утилиту POSIX "false":

/*
   Это первая программа на Си
 */
int  // функция возвращает число (integer)
main(void) {   // Принимает ничто (void)
    return 1;  // Всё "плохо" - вернули 1
}

Что происходит:

  • Комментарии могуть быть // и /* */
  • Объявляем функцию main – именно она является точкой входа для программы на Си:
    • Сначала пишем int – функция вернёт знаковое число (integer).
    • В скобках – аргументы функции. В нашем случае ничего не надо. Ничто = void.
    • В теле функции (внутри фигурных скобок):
      • Возвращаем из функции 1. Для функции main – это код возврата программы (errorlevel / $?).

Собственно, именно это и делает утилита false – возвращает не 0. Возможно, вам это покажется странным: во многих языках как раз 0 - ложь, а ненулевые значения – истина. Но в POSIX истина одна, а вот ошибочных вариантов работы программы (лжи) может быть много.

Компиляция, запуск

Собираем компилятором clang:

    clang false.c -o ./false

Что происходит:

  • clang'у для компиляции даём файл false.c (с программой, описанной выше).
  • Ключ -o – куда выводить результат. К нашем случае – ./false.

Clang – один из компиляторов Си (также есть gcc, MSVS и т.д.).

Запускаем:

falseecho $?
    1

Ломаем false

О да, как только мы что-то сказали или написали, сразу стоит подумать: а как это "сломать". На самом деле, интерес не в том, чтобы что-то испортить, но заставить работать иначе, чем задумывалось: как ребёнок, мы будем искать "границы дозволенного".

Итак, я предлагаю вам подумать: что же может пойти "не так", учитывая то определение, которое мы дали утилите false. Также есть скользкий момент с самим кодом. Нет, безусловно, наш false прекрасен и нерушим, но и тут есть интересные моменты...

Дальше, к ответу на "загадку".

Также может быть вам интересно:

Вступление в наСИлие

Читать »

Функции и типы в первом приближении

Читать »
Фото Как сделать свою middleware в Django (с примерами)

Как сделать свою middleware в Django (с примерами)

Middleware или "промежуточное программное обеспечение" - элегантный способ установить общие правила обработки запросов и ответов приложения. Давайте напишем парочку middleware, чтобы понять, как они работают.

Фото Как настроить отправку почты из Django

Как настроить отправку почты из Django

Письма об ошибках, отчёты на почту, восстановление паролей - всё это полезно при работе с сайтом. Django предоставляет удобный способ это сделать с минимумом настроек!

Фото Добавляем поддержку медиа-файлов в Django проект

Добавляем поддержку медиа-файлов в Django проект

Современные сайты редко ограничиваются только текстом и вёрсткой. Часто в заметках красуются фотографии, а рядом с описанием товаров - их изображения.

Фото Настройка журналирования (логирования) в Python с примерами

Настройка журналирования (логирования) в Python с примерами

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

Фото Новый оператор match-case в Python

Новый оператор match-case в Python

В новой версии Python (3.10) появится новый оператор. Новый оператор сопоставления по шаблону (match-case).

Фото Нет слов, одни... однострочники

Нет слов, одни... однострочники

На днях вышел пост со списком полезных однострочников для JavaScript программистов. Памятуя Perl-овую молодость, заглянул туда.

Фото Добавляем переменные в контекст Django шаблонов (свой контекст-процессор)

Добавляем переменные в контекст Django шаблонов (свой контекст-процессор)

В Django вы можете передавать данные в шаблоны посредством контекстов. Контекст передаётся из контроллера (view в терминах Django), однако, если одни и те же данные нужны в разных местах, лучше сделать свой контекст-процессор.

Фото Пример своей консольной команды в Django проекте

Пример своей консольной команды в Django проекте

Если вы работали с Django проектом, то, скорее всего, запускали команды из консоли (manage.py). В Django есть простой способ писать свои команды для управления проектом.