UNIX — универсальная среда программирования
UNIX — универсальная среда программирования читать книгу онлайн
В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями
shell.
Для программистов-пользователей операционной системы UNIX.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
С помощью
lseekget(fd, pos, buf, n) /* read n bytes from position pos */ int fd, n; long pos; char *buf;{ if (lseek(fd, pos, 0) == -1) /* get to pos */ return -1; return read(fd, buf, n);}Модифицируйте
readslow-е$ readslow -езаставляет
readslowlseekПерепишите
efopen7.2 Файловая система: каталоги
Наша следующая тема — как ориентироваться в иерархии каталогов. При этом мы будем использовать не новые системные вызовы, а лишь несколько старых в новом контексте. В качестве примера приведем функцию
spnamen = spname(name, newname);ищет файл с именем, "достаточно близким" к name. Если такое имя найдено, оно копируется в
newnamespnameSpnamep$ p /urs/srx/ccmd/p/spnam.с "/usr/src/cmd/p/spname.с"? y /* spname: возвращает верно написанное имя файла */...Пока мы пишем имя файла,
spnameПрежде чем писать программу, уместно сделать короткий обзор структуры файловой системы. Каталог представляет собой файл, содержащий список имен файлов и указание, где они размещены. Место размещения определяется индексом в так называемой индексной таблице файлов. В записи индексной таблицы содержится вся информация о файле, кроме его имени. Строка каталога, таким образом, состоит из двух элементов — индекса файла и его имени. Точное описание можно найти в файле
<sys/dir.h>$ cat /usr/include/sys/dir.h#define DIRSIZ 14 /* максимальная длина имени файла */struct direct /* структура строки каталога */{ ino_t d_ino; /* номер индексного дескриптора */ char d_name[DIRSIZ]; /* имя файла */};$"Тип"
ino_ttypedefunsigned shorttypedef<sys/types.h><sys/dir.h>Действия
spname/d1/d2/f/d1d2Мы разбили процесс на три функции. Сама
spnamemindistspnamespdist/* spname: return correctly spelled filename *//* * spname(oldname, newname) char *oldname, *newname; * returns -1 if no reasonable match to oldname, * 0 if exact match, *1 if corrected. * stores corrected name in newname. */#include <sys/types.h>#include <sys/dir.h>spname(oldname, newname) char *oldname, *newname;{ char *p, guess[DIRSIZ+1], best[DIRSIZ+1]; char *new = newname, *old = oldname; for (;;) { while (*old == '/') /* skip slashes */ *new++ = *old++; *new = ' '; if (*old == ' ') /* exact or corrected */ return strcmp(oldname, newname) != 0;
