UNIX — универсальная среда программирования
UNIX — универсальная среда программирования читать книгу онлайн
В книге американских авторов — разработчиков операционной системы UNIX — блестяще решена проблема автоматизации деятельности программиста, системной поддержки его творчества, выходящей за рамки языков программирования. Профессионалам открыт богатый "встроенный" арсенал системы UNIX. Многочисленными примерами иллюстрировано использование языка управления заданиями
shell.
Для программистов-пользователей операционной системы UNIX.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
#include <signal.h>system(s) /* run command line s */ char *s;{ int status, pid, w, tty; int (*istat)(), (*qstat)(); ... if ((pid = fork()) == 0) { ... execlp("sh", "sh", "-c", s, (char*)0); exit(127); } ... istat = signal(SIGINT, SIG_IGN); qstat = signal(SIGQUIT, SIG_IGN); while ((w = wait(&status)) != pid && w != -1); if (w == -1) status = -1; signal(SIGINT, istat); signal(SIGQUIT, qstat); return status;}Несколько слов по поводу описаний: функция
signalSIG_IGNSIG_DFL<signal.h>#define SIG_DFL (int(*)())0#define SIG_IGM (int(*)())1Системный вызов
alarm(n)SIGALRMДля иллюстрации приведем программу
timeoutwatchfor$ timeout -3600 watchfor dmg &Программа
timeout/* timeout: set time limit on a process */#include <stdio.h>#include <signal.h>int pid; /* child process id */char *progname;main(argc, argv) int argc; char *argv[];{ int sec = 10, status, onalarm(); progname = argv[0]; if (argc > 1 && argv[1][0] == '-') { sec = atoi(&argv[1][1]); argc--; argv++; } if (argc < 2) error("Usage: %s [-10] command", progname); if ((pid=fork()) == 0) { execvp(argv[1], &argv[1]); error("couldn't start %s", argv[1]); } signal(SIGALRM, onalarm); alarm(sec); if (wait(&status) == -1 || (status & 0177) != 0) error("%s killed", argv[1]); exit((status >> 8) & 0377);}onalarm() /* kill child when alarm arrives */{ kill(pid, SIGKILL);}Можете ли вы представить, как реализована
sleeppause(2)sleepalarmДетального описания реализации системы UNIX не существует отчасти потому, что программа является собственностью фирмы. В статье К. Томпсона "UNIX implementation" (BSTJ, July, 1978) описываются основные идеи. Другие статьи, в которых обсуждаются связанные с UNIX темы, это "The UNIX system — a retrospective" (BSTJ, July, 1978) и "The evolution of the UNIX timesharing system" (Symposium on Language Design and Programming Methodology, Springer — Verlag, Lecture Notes in Computer Science #79, 1979). Обе статьи принадлежат Д. Ритчи.
Программа
readslowreadslowНа создание
spname
