The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Немедленное или отложенное действие ^C ^Z"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Немедленное или отложенное действие ^C ^Z"  +/
Сообщение от Vedmak (ok) on 09-Июл-09, 01:21 
Добрый день,

4. В MS DOS, как известно, Control-Break распознается некоторыми функциями ввода. То есть мало того, что пользователь нажал CTRL-Break, при этом само по себе ничего не произойдет, программа еще не прервется и будет продолжать работу – надо, чтобы программа вызвала функцию чтения MS DOS с клавиатуры, поддерживающую обработку Ctr-Break (если был ctrl—break, из этой функции программа уже не вернется) :)
Во FreeBSD есть ^C и ^Z (suspend). Вопрос, они сразу действуют или как в MS DOS, т.е. надо, чтобы программа обратилась к терминалу? Какова внутренняя архитектура этих механизмов?

Все вопросы - http://unixvop.narod.ru/

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Немедленное или отложенное действие ^C ^Z"  +/
Сообщение от VAK on 09-Июл-09, 11:42 
что-то мне подсказывает ,что Вы глупости пишете.
CTRL-Break генерирует прерывание и если в программе есть обработчик такового
и если этот тип прерываний не запрещен и/или если программа для MSDOS
периодически смотрит на буфер клавиатуры, тогда программа и
среагирует соответствующим образом. А то, что для _некоторых_
функций ввода это прерывание обрабатывается-это заслуга тех, кто разрабатывал
эти функции. А не Ваша или Вашей программы :-).
И кстати, ^C под MSDOS тоже работает. В "некоторых функциях чтения".

Что касается *NIX и FreeBSD в частности...
У них тоже есть механизм прерываний, только называются они сигналами.
^C, ^Z и много-много разных... И послать их можно не только нажав на кнопки клавиатуры.
И эти прерывания программе посылает операционная система.
Посылает задаче сразу же. Без задержек, независимо от того, чем программа занята.
На то оно и прерывание ;-).
Как программа будет реагировать на эти сигналы - это как уж Вы напишите свою программу.
Может заблокировать их, может отложить реакцию...

Вообще, лучше Вам почитать что-нибудь... Например, замечательную книгу
Рочкинда "Программирование для UNIX". После этого все должно стать понятнее.

А про "сразу"... Это скорее философский вопрос ;-). О одновременности событий,
о параллельности в одноядерных CPU (например) и т.д.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Немедленное или отложенное действие ^C ^Z"  +/
Сообщение от angra (ok) on 09-Июл-09, 14:59 
Пару уточнений:
1. Прерывания и сигналы это очень разные механизмы.
2. SIGSTOP(это про ctrl+z), программа не может игнорировать/блокировать/отложить.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Немедленное или отложенное действие ^C ^Z"  +/
Сообщение от Vedmak (ok) on 09-Июл-09, 17:35 
>Пару уточнений:
>2. SIGSTOP(это про ctrl+z), программа не может игнорировать/блокировать/отложить.

А что значит не может отложить? Программа должна что-то сделать, обрабатывая этот сигнал, и только после этого уйдет в фон (jobs), или это уже от нее не зависит? Может этот сигнал программа не сама обрабатывает?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Немедленное или отложенное действие ^C ^Z"  +/
Сообщение от const86 (ok) on 09-Июл-09, 20:36 
>>2. SIGSTOP(это про ctrl+z), программа не может игнорировать/блокировать/отложить.
>А что значит не может отложить?

Она просто ничего не может сделать по этому поводу. Если STOP попал в процесс, то процесс останавливается сразу же без его ведома; не вызываются никакие обработчики. Аналогично с сигналом KILL, только его нельзя (или можно?) отправлять с терминала.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Немедленное или отложенное действие ^C ^Z"  +/
Сообщение от Vedmak (ok) on 09-Июл-09, 17:33 
>что-то мне подсказывает ,что Вы глупости пишете.

Ну, одна маленькая неточность. Я имел в виду, что прерывание будет сразу (если там нет прерываний более высокого приоритета), но программа снимется не сразу. Если не создавать процедуру обработки "Ctrl-Break...". Еще есть BREAK=ON (у Джордейна написано, что при этом вызов любой функции MS DOS будет проверять ctrl-break).

>А то, что для _некоторых_
>функций ввода это прерывание обрабатывается-это заслуга тех, кто разрабатывал
>эти функции. А не Ваша или Вашей программы :-)

я такого не писал, моя заслуга в том, что я вызову эти функции, а не другие.

>Посылает задаче сразу же. Без задержек, независимо от того, чем программа занята.

Посылает-то сразу... а что дальше происходит внутри команды man например?

>Вообще, лучше Вам почитать что-нибудь... Например, замечательную книгу
>Рочкинда "Программирование для UNIX". После этого все должно стать понятнее.

поищем. Но например в книге Теренса Чана "Системное программирование на C++ для Unix" нет даже определения демона.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру