ГУРУУУУУ! Объясните по русски, пожалуйста! Описание типа:
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 для данного устройства? Что будет? Просто ничего не прочту? Все нормально?
Спасибо большое за внимание и Ваше время.