Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: что такое O_NOCTTY для деревянных  (Прочитано 7663 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн cmygeHm

  • Автор темы
  • Новичок
  • *
  • Сообщений: 28
    • Просмотр профиля
что такое O_NOCTTY для деревянных
« : 28 Сентября 2011, 23:01:24 »
ГУРУУУУУ! Объясните по русски, пожалуйста! Описание типа:
Цитировать
O_NONBLOCK    Открыть файл в неблокируемом режиме, если это возможно
O_NDELAY    То же, что и O_NONBLOCK
O_NOCTTY    Если открываемый файл - терминальное устройство, не делать его управляющим терминалом процесса
не совсем понятно... Или
Цитировать
Флаг O_NOCTTY говорит UNIX, что эта программа не хочет быть управляющим терминалом для этого порта. Если вы не укажете этого, то любой ввод (подобный сигналу абортирования от клавиатуры или что-нибудь подобное) будет затрагивать ваш процесс. Программы подобные getty(1M/8) используют эту возможность при старте логин-процесса, но обычно пользовательская программа не нуждается в таком поведении.

Флаг O_NDELAY говорит UNIX, что эта программа не заботится о состоянии сигнала DCD, т.е. что другой конец линии запущен. Если вы не укажете этот флаг, то ваш процесс "заснет" до тех пор пока на линии DCD не появится уровень space (off).

Из второго описания понимаю так: если после запуска программы в консоли я буду жать Ctrl+C, то программа не будет абортироваться (при использовании O_NOCTTY). Блин! Вот сейчас начинаю понимать, что видимо это касается момента когда мы открываем виртуальные консоли tty1-tty6. А как ведет себя флаг в отношении открытия com-порта? Я просто делаю:

int fd;
fd = open("/dev/ttyS0", O_RDONLY | O_NOCTTY | O_NDELAY);
if (fd == -1)
{
printf("Unable to open com");
}
и запущенный исполняемый файл прерывается с помощью Ctrl+C и вообще ввод с клавиатуры возможен, это при O_NOCTTY...

О O_NDELAY... Если я открываю ком-порт с этим флагом, то "программа не заботится о состоянии сигнала DCD, т.е. что другой конец линии запущен". Это лишь для того, чтобы "а вдруг устройство и не присылает сигнал DCD, вдруг оно сразу начинает работать и все..." Согласно книге, сигнал DCD "не всегда используется и не всегда присутствует в реализации"http://linuxland.itam.nsc.ru/misc/other19/index.html#2_2_1
А если я начну читать, а согласно протоколу надо было дождаться сигнала DCD для данного устройства? Что будет? Просто ничего не прочту? Все нормально?

Спасибо большое за внимание и Ваше время.

 

Страница сгенерирована за 0.016 секунд. Запросов: 22.