UNIX — универсальная среда программирования
UNIX — универсальная среда программирования читать книгу онлайн
В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями
shell.
Для программистов-пользователей операционной системы UNIX.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
sv(file, dir) /* save file in dir */ char *file, *dir;{ struct stat sti, sto; int fin, fout, n; char target[BUFSIZ], buf[BUFSIZ], *index(); sprintf(target, "%s/%s", dir, file); if (index(file, '/') != NULL) /* strchr() in some systems */ error("won't handle /'s in %s", file); if (stat(file, &sti) == -1) error("can't stat %s", file); if (stat(target, &sto) == -1) /* target not present */ sto.st_mtime = 0; /* so make it look old */ if (sti.st_mtime < sto.st_mtime) /* target is newer */ fprintf(stderr, "%s: %s not copiedn", progname, file); else if ((fin = open(file, 0)) == -1) error("can't open file %s", file); else if ((fout = creat(target, sti.st_mode)) == -1) error("can't create %s", target); else while ((n = read(fin, buf, sizeof buf)) > 0) if (write(fout, buf, n) != n) error("error writing %s", target); close(fin); close(fout);}Мы заменили стандартные функции ввода-вывода функцией
creatsvindexstrchrstring(3)Хотя программа
sv<stat.h><dir.h>Отметим, что по крайней мере две трети кода
svПрограмма
svwritewriteДело в том, что контроль ошибок весьма утомителен, но тем не менее важен. Из-за ограниченного объема книги и обширности излагаемого в ней материала мы не уделяли должного внимания этому вопросу. Но в настоящих, "производственных" программах не следует позволять себе игнорировать ошибки.
Модифицируйте
checkmailsscanflseekМодифицируйте
checkmailcheckmailНапишите программу
watchfileПрограмма
svСделайте
svcpcpsvcp -vНапишите программу
random$ random filenameдолжна выдавать одну строку, произвольно выбранную из файла. Если есть файл
peoplerandomscapegoat$ cat scapegoatecho "В этом виноват `random people`!"$ scapegoatВ этом виноват Кен!$Убедитесь в том, что
randomПомимо прочего в индексном дескрипторе указаны адреса размещения блоков файла на диске. Рассмотрите файл
<sys/into.h>icaticat
