Linux программирование в примерах | страница 17
>\177ELF
».Помимо двоичных исполняемых файлов, ядро поддерживает также исполняемые сценарии (скрипты). Такой файл также начинается с магического числа: в этом случае, это два обычных символа ># !
. Сценарий является программой, исполняемой интерпретатором, таким, как командный процессор, awk, Perl, Python или Tcl. Строка, начинающаяся с >#!
, предоставляет полный путь к интерпретатору и один необязательный аргумент:
>#! /bin/awk -f
>BEGIN {print "hello, world"}
Предположим, указанное содержимое располагается в файле >hello.awk
и этот файл исполняемый. Когда вы набираете '>hello.awk
', ядро запускает программу, как если бы вы напечатали '>/bin/awk -f hello.awk
'. Любые дополнительные аргументы командной строки также передаются программе. В этом случае, >awk
запускает программу и отображает общеизвестное сообщение >hello, world
.
Механизм с использованием >#!
является элегантным способом скрыть различие между двоичными исполняемыми файлами и сценариями. Если >hello.awk
переименовать просто в >hello
, пользователь, набирающий '>hello
', не сможет сказать (и, конечно, не должен знать), что >hello
не является двоичной исполняемой программой.
1.1.4. Устройства
Одним из самых замечательных новшеств Unix было объединение файлового ввода- вывода и ввода-вывода от устройств.[14] Устройства выглядят в файловой системе как файлы, для доступа к ним используются обычные права доступа, а для их открытия, чтения, записи и закрытия используются те же самые системные вызовы ввода-вывода. Вся «магия», заставляющая устройства выглядеть подобно файлам, скрыта в ядре. Это просто другой аспект движущего принципа простоты в действии, мы можем выразить это как никаких частных случаев для кода пользователя.
В повседневной практике, в частности, на уровне оболочки, часто появляются два устройства: >/dev/null
и >/dev/tty
.
>/dev/null
является «битоприемником». Все данные, посылаемые >/dev/null
, уничтожаются операционной системой, а все попытки прочесть отсюда немедленно возвращают конец файла (EOF).
>/dev/tty
является текущим управляющим терминалом процесса — тем, который он слушает, когда пользователь набирает символ прерывания (обычно CTRL-C) или выполняет управление заданием (CTRL-Z).
Системы GNU/Linux и многие современные системы Unix предоставляют устройства