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

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

Опубликовано: 03.07.2018

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

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

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

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

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

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

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

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

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

    clang false.c -o ./false

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

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

Запускаем:

    → false
    → echo $?
    1

Ломаем false

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

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

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

Также может быть вам интересно:
ПрограммыКодLinuxЯзык СиОбразование
← Вступление в наСИлие Функции и типы в первом приближении →