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

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

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

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

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

Дуг Макилрой, изобретатель каналов 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 прекрасен и нерушим, но и тут есть интересные моменты...

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

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

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

Читать »

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

Читать »
Фото Python: Встроенные типы данных (list, set, dict, etc)

Python: Встроенные типы данных (list, set, dict, etc)

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

Фото Python: типы данных, переменные, логическое ветвление и циклы

Python: типы данных, переменные, логическое ветвление и циклы

Первая часть заметок о Python. О базовых типах, переменных, ветвлении и циклах.

Фото Как установить PostgreSQL на Linux и создать базу и пользователя

Как установить PostgreSQL на Linux и создать базу и пользователя

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

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

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

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

Фото Маленькая книга о Go (golang)

Маленькая книга о Go (golang)

Маленькая книга о Go распространяется под лицензией Attribution-NonCommercial-ShareAlike 4.0 International license. Вы не должны платить за эту книгу.

Фото Новый синтаксис старой команды with в Python 3.10

Новый синтаксис старой команды with в Python 3.10

Как же долго моё чувство прекрасного страдало… Но в Python 3.10 появился новый парсер синтаксических конструкций Python!

Фото Добавляем постраничную пагинацию на Django сайт

Добавляем постраничную пагинацию на Django сайт

На сайтах часто встречаются многостраничные объекты: список товаров, список заметок и т.д. Поэтому важно уметь добавить навигацию по страницам на Django-проекте.

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

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

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