» » » Арнольд Роббинс - Linux программирование в примерах


Авторские права

Арнольд Роббинс - Linux программирование в примерах

Здесь можно скачать бесплатно "Арнольд Роббинс - Linux программирование в примерах" в формате fb2, epub, txt, doc, pdf. Жанр: Программное обеспечение, издательство Кудиц-Образ, год 2005. Так же Вы можете читать книгу онлайн без регистрации и SMS на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Арнольд Роббинс - Linux программирование в примерах
Рейтинг:
Название:
Linux программирование в примерах
Издательство:
Кудиц-Образ
Год:
2005
ISBN:
5-9579-0059-1
Скачать:

99Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания...

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

Описание книги "Linux программирование в примерах"

Описание и краткое содержание "Linux программирование в примерах" читать бесплатно онлайн.



В книге рассмотрены вопросы, связанные с программированием под Linux: файловый ввод/вывод, метаданные файлов, основы управления памятью, процессы и сигналы, пользователи и группы, вопросы интернационализации и локализации, сортировка, поиск и многие другие. Много внимания уделено средствам отладки, доступным под GNU Linux. Все темы иллюстрируются примерами кода, взятого из V7 UNIX и GNU. Эта книга может быть полезна любому, кто интересуется программированием под Linux.






391   else if (cflg)

392    rep->lmtime = statb.st_ctime;

393   else

394    rep->lmtime = statb.st_mtime;

395   tblocks += nblock(statb.st_size);

396  }

397  return(rep);

398 }

Строки 356–396 обрабатывают вызов stat(). Если это аргумент командной строки или если statreq установлен в true благодаря опции, код заполняет struct lbuf следующим образом:

• Строки 357–366: вызывают stat(), при ее неудаче выводится сообщение об ошибке с установкой соответствующих значений, затем возвращается NULL (выраженный в виде 0).

• Строки 367–368: устанавливают в struct stat поля номера индекса и размера, если вызов stat() был успешным.

• Строки 369–384: обрабатывают особые случаи каталогов, блочных и символьных устройств. Во всех случаях код обновляет поле ltype. Для устройств значение lsize замещается значением st_rdev.

• Строки 385–388. заполняются поля lflags, luid, lgid и lnl из соответствующих полей в struct stat. Строка 385 удаляет биты типа файла, оставляя 12 битов прав доступа (на чтение/запись/исполнение для владельца/группы/остальных, а также setuid, setgid и save-text).

• Строки 389–394: основываясь на опциях командной строки, используют одно из трех полей времени в struct stat для поля lmtime в struct lbuf.

• Строка 395: обновляет глобальную переменную tblocks числом блоков в файле.

400 compar(pp1, pp2) /* int compar(struct lbuf **pp1, */

401 struct lbuf **pp1, **pp2; /* struct lbuf **pp2) */

402 {

403  register struct lbuf *p1, *p2;

404

405  p1 = *pp1;

406  p2 = *pp2;

407  if (dflg==0) {

408   if (p1->lflags&ISARG && p1->ltype=='d') {

409    if (!(p2->lflags&ISARG && p2->ltype=='d'))

410     return(1);

411   } else {

412    if (p2->lflags&ISARG && p2->ltype=='d')

413     return(-1);

414   }

415  }

416  if (tflg) {

417   if(p2->lmtime == p1->lmtime)

418    return(0);

419   if (p2->lmtime > p1->lmtime)

420    return(rflg);

421   return(-rflg);

422  }

423  return(rflg * strcmp(p1->lflags&ISARG ? p1->ln.namep : p1->ln.lname,

424   p2->lflags&ISARG ? p2->ln.namep : p2->ln.lname));

425 }

Функция compar() сжата: в небольшом пространстве происходит многое. Первая вещь, которую следует запомнить, это смысл возвращаемого значения: отрицательное значение означает, что первый файл должен идти перед вторым, ноль означает, что файлы равны, а положительное значение означает, что второй файл должен идти перед первым

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

Наконец, переменная rflg помогает реализовать опцию -r, которая меняет порядок сортировки. Она инициализируется 1 (строка 30). Если -r используется, rflg устанавливается в -1 (строки 89–91).

Следующий псевдокод описывает логику compar(); номера строк на левой границе соответствуют номерам строк ls.c:

407 if ls должна прочесть каталоги # dflg == 0

408  if p1 аргумент командной строки и p1 каталог

409   if p2 не аргумент командной строки и не каталог

410    return 1 # первый идет после второго

      else

       перейти на тест времени

411  else

      # p1 не каталог командной строки

412   if p2 аргумент командной строки и каталог

413    return -1 # первый идет перед вторым

      else

       перейти на тест времени

416 if сортировка основана на времени # tflg равно true

     # сравнить времена:

417  if время p2 равно времени p1

418   return 0

419  if время p2 > времени p1

420   return значение rflg (положительное или отрицательное)

     # время p2 < времени p1

421  return противоположное rflg значение (положительное или отрицательное)

423 Умножить rflg на результат strcmp()

424 для двух имен и вернуть результат

Аргументы strcmp() в строках 423–424 выглядят сбивающими с толку. В зависимости от того, было ли имя файла указано в командной строке или было прочитано из каталога, должны использоваться различные члены объединения ln в struct lbuf.

7.3. Резюме

• V7 ls является сравнительно небольшой программой, хотя она затрагивает многие фундаментальные аспекты программирования Unix — файловый ввод-вывод, вспомогательные данные файлов, содержание каталогов, пользователи и группы, значения времени и даты, сортировку и динамическое управление памятью.

• Наиболее примечательным внешним различием между V7 ls и современной ls является трактовка опций -а и -l. У версии V7 значительно меньше опций, чем у современных версий; заметным недостатком является отсутствие рекурсивной опции -R.

• Управление flist является чистым способом использования ограниченной памяти архитектуры PDP-11, предоставляя в то же время как можно больше сведений, struct lbuf хорошо извлекает нужные сведения из struct stat; это значительно упрощает код. Код для вывода девяти битов доступа компактен и элегантен.

• Некоторые части ls используют удивительно маленькие лимиты, такие, как верхняя граница числа файлов в 1024 или размер буфера в makename() в 100.

Упражнения

1. Рассмотрите функцию getname(). Что случится, если запрошенный ID равен 256, а в /etc/passwd есть следующие две строки, в этом порядке:

joe:xyzzy:2160:10:Joe User:/usr/joe:/bin/sh

jane:zzyxx:216:12:Jane User:/usr/jane:/bin/sh

2. Рассмотрите функцию makename(). Может ли она использовать sprintf() для составления имени? Почему может или почему нет?

3. Являются ли строки 319–320 в readdir() действительно необходимыми?

4. Возьмите программу stat, которую вы написали в качестве упражнения в «Упражнениях» к главе 6. Добавьте функцию nblock() из V7 ls и выведите результаты вместе с полем st_blocks из struct stat. Добавьте видимый маркер, когда они различны.

5. Как бы вы оценили V7 ls по ее использованию malloc()? (Подсказка: как часто вызывается free()? Где ее следовало бы вызвать?)

6. Как вы оценили бы ясность кода V7 ls? (Подсказка: сколько там комментариев?)

7. Очертите шаги, которые нужно было бы сделать, чтобы адаптировать V7 ls для современных систем.

Глава 8

Файловые системы и обходы каталогов

Данная глава завершает обсуждение файловых систем и каталогов Linux (и Unix). Сначала мы опишем, как к логическому пространству имен файловой системы добавляется (и удаляется) раздел диска, содержащий файловую систему, таким образом, что в общем пользователю не нужно ни знать, ни заботиться о месте физического размещения файла, вместе с API для работы с файловыми системами

Затем мы опишем, как перемещаться по иерархическому пространству имен файлов, как получать полный путь текущего рабочего каталога и как без труда обрабатывать произвольные иерархии (деревья) каталогов, используя функцию nftw(). Наконец, мы опишем специализированный, но важный системный вызов chroot().

8.1. Монтирование и демонтирование файловых систем

Унифицированное иерархическое пространство имен файлов является большим достоинством дизайна Linux/Unix. Данный раздел рассматривает, как административные файлы, команды и операционная система объединяются для построения пространства имен из отдельных физических устройств, содержащих данные и служебные данные файлов.

8.1.1. Обзор основ

В главе 5 «Каталоги и служебные данные файлов», были представлены индексы для служебных данных файлов и описано, как элементы каталогов связывают имена файлов с индексами В ней также были описаны разделы и файловые системы, и вы видели, что прямые ссылки ограничены работой в пределах одной файловой системы, поскольку каталоги содержат лишь номера индексов, а последние не уникальны среди всего набора использующихся файловых систем.

Помимо индексов и блоков данных, файловые системы содержат также одну или более копий суперблока. Это специальный дисковый блок, который описывает файловую систему; его сведения обновляются по мере изменений в самой файловой системе. Например, он содержит число свободных и используемых индексов, свободных и используемых блоков и другие сведения. Он включает также магическое число: специальное уникальное значение в специальном месте, которое идентифицирует тип файловой системы (Вскоре мы увидим, насколько это важно.)


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

Похожие книги на "Linux программирование в примерах"

Книги похожие на "Linux программирование в примерах" читать онлайн или скачать бесплатно полные версии.


Понравилась книга? Оставьте Ваш комментарий, поделитесь впечатлениями или расскажите друзьям

Все книги автора Арнольд Роббинс

Арнольд Роббинс - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Отзывы о "Арнольд Роббинс - Linux программирование в примерах"

Отзывы читателей о книге "Linux программирование в примерах", комментарии и мнения людей о произведении.

А что Вы думаете о книге? Оставьте Ваш отзыв.