Чтение онлайн

на главную - закладки

Жанры

UNIX — универсальная среда программирования
Шрифт:

 signal(SIGQUIT, qstat);

 return status;

}

3.8.53

system.c

/*

 * Safer version of system for interactive programs

 */

#include <signal.h>

#include <stdio.h>

system(s) /* run command line s */

 char *s;

{

 int status, pid, w, tty;

 int (*istat), (*qstat);

 extern char *progname;

 fflush(stdout);

 tty = open("/dev/tty", 2);

 if (tty == -1) {

fprintf (stderr, "%s: can't open /dev/tty\n", progname);

return -1;

 }

 if ((pid = fork) == 0) {

close(0);

dup(tty);

close(1);

dup(tty);

close(2);

dup(tty);

close(tty);

execlp("sh", "sh", "-c", s, (char*)0);

exit(127);

 }

 close(tty);

 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;

}

3.8.54

timeout.c

/* 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);

}

#include "error.c"

3.8.55

toolong

length($0) > 72 { print "Line", NR, "too long:", substr($0,1,60) }

3.8.56

ttyin1.c

ttyin /* process response from /dev/tty (version 1) */

{

 char buf[BUFSIZ];

 FILE *efopen;

 static FILE *tty = NULL;

 if (tty == NULL)

tty = efopen("/dev/tty", "r");

 if (fgets(buf, BUFSIZ, tty) == NULL || buf[0] == 'q')

exit(0);

 else /* ordinary line */

return buf[0];

}

3.8.57

ttyin2.c

ttyin /* process response from /dev/tty (version 2) */

{

 char buf[BUFSIZ];

 FILE *efopen;

 static FILE *tty = NULL;

 if (tty == NULL)

tty = efopen("/dev/tty", "r");

 for (;;) {

if (fgets(buf,BUFSIZ,tty) == NULL || buf[0] == 'q')

exit(0);

else if (buf[0] == '!') {

system(buf+1); /* BUG here */

printf("!\n");

}

else /* ordinary line */

return buf[0];

 }

}

#include "system.c"

Поделиться:
Популярные книги

Кодекс Крови. Книга III

Борзых М.
3. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга III

Отчий дом. Семейная хроника

Чириков Евгений Николаевич
Проза:
классическая проза
5.00
рейтинг книги
Отчий дом. Семейная хроника

Скандальная свадьба

Данич Дина
1. Такие разные свадьбы
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Скандальная свадьба

Путанабус. Трилогия

Старицкий Дмитрий
Фантастика:
боевая фантастика
6.93
рейтинг книги
Путанабус. Трилогия

Идеальный мир для Лекаря 25

Сапфир Олег
25. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 25

Кодекс Крови. Книга ХVI

Борзых М.
16. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХVI

Проданная невеста

Wolf Lita
Любовные романы:
любовно-фантастические романы
5.80
рейтинг книги
Проданная невеста

Потомок бога

Решетов Евгений Валерьевич
1. Локки
Фантастика:
попаданцы
альтернативная история
аниме
сказочная фантастика
5.00
рейтинг книги
Потомок бога

С Д. Том 16

Клеванский Кирилл Сергеевич
16. Сердце дракона
Фантастика:
боевая фантастика
6.94
рейтинг книги
С Д. Том 16

Переиграть войну! Пенталогия

Рыбаков Артем Олегович
Переиграть войну!
Фантастика:
героическая фантастика
альтернативная история
8.25
рейтинг книги
Переиграть войну! Пенталогия

От Советского Информбюро - 1941-1945 (Сборник)

Неизвестен 3 Автор
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
От Советского Информбюро - 1941-1945 (Сборник)

Санек 3

Седой Василий
3. Санек
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Санек 3

Прометей: повелитель стали

Рави Ивар
3. Прометей
Фантастика:
фэнтези
7.05
рейтинг книги
Прометей: повелитель стали

Отмороженный 14.0

Гарцевич Евгений Александрович
14. Отмороженный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Отмороженный 14.0