UNIX — универсальная среда программирования
UNIX — универсальная среда программирования читать книгу онлайн
В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями
shell.
Для программистов-пользователей операционной системы UNIX.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
struct stat stbuf;stat(name, &stbuf);fstat(fd, &stbuf);заполняет структуру
stbuffdЗная все это, мы можем приступить к написанию некоторой полезной программы. Начнем с версии
checkmailcheckmail/* checkmail: watch user's mailbox */#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>char *progname;char *maildir = "/usr/spool/mail"; /* system dependent */main(argc, argv) int argc; char *argv[];{ struct stat buf; char *name, *getlogin(); int lastsize = 0; progname = argv[0]; if ((name = getlogin()) == NULL) error("can't get login name", (char*)0); if (chdir(maildir) == -1) error("can't cd to %s", maildir); for (;;) { if (stat(name, &buf) == -1) /* no mailbox */ buf.st_size = 0; if (buf.st_size > lastsize) fprintf(stderr, "nYou have mail 07n"); lastsize = buf.st_size; sleep(60); }}Функция
getlogin(3)NULLcheckmailchdirstatmaildircheckmailМы приводили эту программу в гл. 5 для иллюстрации циклов
shellstatcheckmailsvСледующей мы собираемся написать похожую на
cpsvsvsvcheckmailsv$ sv file1 file2 ... dirОна копирует
file1dir/file1file2dir/file2sv'/'/* sv: save new files */#include <stdio.h>#include <sys/types.h>#include <sys/dir.h>#include <sys/stat.h>char *progname;main(argc, argv) int argc; char *argv[];{ int i; struct stat stbuf; char *dir = argv[argc-1]; progname = argv[0]; if (argc <= 2) error("Usage: %s files... dir", progname); if (stat(dir, &stbuf) == -1) error("can't access directory %s", dir); if ((stbuf.st_mode & S_IFMT) != S_IFDIR) error("%s is not a directory", dir); for (i = 1; i < argc-1; i++) sv(argv[i], dir); exit(0);}Значения времени, хранящиеся в индексных дескрипторах, исчисляются в секундах (за начало отсчета принято время 0:00 по Гринвичу, 1 января 1970 г.), так что более старые файлы имеют меньшие значения в поле
st_mtime
