Здравствуйте, люди добрые! Поможите, пожалуйста. Такая, значит, проблема. Есть принтер (STAR TSP2000), работающий через RS-232. Когда в нем всё нормально работает (т.е. он включен, есть бумага, буфер не переполнен и т.п.), то он выставляет сигналы CTS и DSR. Если что-то не так, то они, соответственно, убираются. Мне надо написать функцию, которая бы писала в этот принтер данные, а если не получается в течение секунды - то выдавала бы ошибку. Пытаемся использовать функцию poll(2). Пишем: #define RES_OK 0 #define RES_ERROR 1 #define RES_TIMEOUT 2 ... int fd, res; struct pollfd pfd; ... fd = open("/dev/ttyS0", O_CREAT | O_WRONLY | O_NOCTTY); if (fd == -1) return RES_ERROR; tios.c_iflag = 0; tios.c_oflag = 0; tios.c_cflag = B9600 | CS8 | CLOCAL | CRTSCTS; tios.c_lflag = 0; tcsetattr(fd, TCSANOW, &tios); ... memset(&pfd, 0, sizeof(struct pollfd)); pfd.fd = fd; pfd.events = POLLOUT; res = poll(&pfd, 1, 1000); printf("Poll returned %d", res); if (res > 0) { res = write(fd, buffer, buflen); return (res > 0) ? RES_OK : RES_ERROR; } if (!res) return RES_TIMEOUT; if (res < 0) return RES_ERROR; Компилируем, запускаем. И тут возникает такой эффект: poll(2) возвращает единицу (т.е. "всё нормально, можно писать в порт") сразу, независимо от состояния принтера. А вот функция write(2) блокируется, если CTS не выставлен. Т.е., poll(2) не "ловит" CTS. Кто знает, как с этим бороться, напишите, плз. Алексей Боленок.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум pty и каноничный режим (2011)
- Форум tcsetattr повторный вызов (2011)
- Форум Serial port programming (2008)
- Форум [C] Com Port (2007)
- Форум [ttyUSB0] вызов read() (2010)
- Форум Не получается читать с порта (2013)
- Форум Правильно ли я открываю СОМ порт? ХХХХХХХЕЕЕЕЕЛЛЛЛЛППППППП!!!!!!!!!!! (2004)
- Форум Работа с com портом (2007)
- Форум Раньше работал СОМ порт, теперь не работает помогите разобраться.! HELP!!!!!!!!! (2004)
- Форум Протокол обмена Linux -> датчик (2017)