4. Различные ссылки на http://www.chris-lott.org/resources/cstyle/
. Этот сайт включает заметки Роба Пайка и несколько статей Генри Спенсера (Henry Spencer). Особенно высокое положение занимает «Рекомендуемый стиль С и стандарты программирования» ( Recommended С Style and Coding Standards ), первоначально написанный на сайте Bell Labs Indian Hill.
• «Файлы и процессы» суммируют мировоззрение Linux/Unix. Трактовка файлов как потоков байтов, а устройств как файлов, и использование стандартных ввода, вывода и ошибки упрощают построение программ и унифицируют модель доступа к данным. Модель прав доступа проста, но гибка, и приложима как к файлам, так и каталогам.
• Процессы являются работающими программами, у которых есть связанные с ними идентификаторы пользователя и группы для проверки прав доступа, а также другие атрибуты, такие, как открытые файлы и текущий рабочий каталог.
• Наиболее заметным различием между стандартным С и оригинальным С является использование прототипов функций для более строгой проверки типов. Хороший программист на С должен быть способен прочесть код, написанный в оригинальном стиле, поскольку его используют многие существующие программы. Новый код должен быть написан с использованием прототипов.
• GNU Coding Standards описывает написание программ GNU. Она предусматривает многочисленные ценные методики и руководящие принципы для создания надежного, практичного программного обеспечения. Принцип «никаких произвольных ограничений» является, возможно, единственным наиболее важным из них. Этот документ является обязательным для прочтения серьезными программистами.
• Переносимость программ является сложной проблемой. Руководящие указания и инструментарий помогают, но в конечном счете нужен также и опыт.
1. Прочтите и прокомментируйте статью Ричарда М. Столмена «Проект GNU» (Richard M. Stallman, «The GNU Project») [26] http://www.gnu.org/gnu/thegnuproject.html — Примеч. автора .
, первоначально написанную в августе 1998 г.
Глава 2
Аргументы, опции и переменные окружения
Первой задачей любой программы обычно является интерпретация опций и аргументов командной строки. Данная глава рассматривает, как программы С (и С++) получают аргументы своей командной строки, описывает стандартные процедуры для разбора опций и бросает взгляд на переменные окружения.
2.1. Соглашения по опциям и аргументам
У слова аргументы есть два значения. Более техническим определением является «все 'слова' в командной строке». Например:
$ ls main.с opts.с process.с
Здесь пользователь напечатал четыре «слова». Все четыре слова сделаны доступными программе в качестве ее аргументов [27] Имя команды — ls в данном примере, так же доступно программе в качестве аргумента — Примеч. науч. ред .
.
Второе определение более неформальное: аргументами являются все слова командной строки, за исключением имени команды. По умолчанию, оболочки Unix отделяют аргументы друг от друга разделителями (пробелами или символами TAB). Кавычки позволяют включать в аргументы разделитель:
$ echo here are lots of spaces
here are lots of spaces /* Оболочка «съедает» пробелы */
$ echo "here are lots of spaces"
here are lots of spaces /* Пробелы остались */
Кавычки прозрачны для запущенной программы; echo
никогда не видит символов двойной кавычки. (В оболочке двойные и одинарные кавычки различаются; обсуждение этих правил выходит за рамки данной книги, которая фокусируется на программировании на С.)
Аргументы можно подразделить далее на опции и операнды . В предыдущих двух примерах все аргументы были операндами: файлы для ls
и простой текст для echo
.
Опции являются специальными аргументами, которые каждая программа интерпретирует. Опции изменяют поведение программы или предоставляют программе информацию. По старому соглашению, которого (почти) всегда придерживаются, опции начинаются с черточки (т.е. дефиса, значка минус), и состоят из единственной буквы. Аргументы опции являются информацией, необходимой для опции, в отличие от обычных аргументов-операндов. Например, опция -f
программы fgrep
означает «использовать содержимое следующего файла в качестве списка строк для поиска». См. рис 2.1.
Рис. 2.1. Компоненты командной строки
Читать дальше