2012-04-24 4 views
0

Я пытаюсь перенаправить все последовательные данные в процесс в VxWorks. Используя следующий кодRedirect VxWorks Последовательный вход

fd = open("/tyCo/0", O_RDWR,0); 
ioctl(fd, FIOSETOPTIONS, OPT_TERMINAL & ~OPT_7_BIT); 
read(fd, line, 100); 

дает правильный вход, за исключением первого символа введенного не заполняется, но выводится на терминал. Поэтому, если я введу «Привет», напечатано «H», а line = «ello». Если я ничего не введу и ударяю ключ возврата, я получаю приглашение от VxWorks Shell.

Я думаю, что оболочка VxWorks перехватывает первую букву данных. Я предполагаю, что мне нужно перенаправить STDIO только на новый процесс, но все найденное мной documentation говорит о том, что он использует ioGlobalStdSet(), который недоступен в VxWorks 6.4 RTP. Как я могу либо перенаправить STDIO, либо убить VxWorks Shell из моего процесса?

ответ

0

Отключение оболочки во время конфигурации и компиляции VxWorks постоянно устраняет проблему. Также можно ввести exit в оболочку, чтобы временно отключить его.

0

Один рабочий процесс - использовать ioGlobalStdSet для перенаправления ввода-вывода на трубу. Затем в RTP откройте трубу в режиме чтения.

С верхней частью моей головы - в ядре:

dev = pipeDevCreate("/pipe/input", 10, 100); 
kernFd = open("/pipe/input", O_RD, 0) 
ioGlobalStdSet(1, kernFd) 

В RTP:

rtpFd = открытом ("/ трубы/входе", O_RD, 0); читать (rtpFd, line, 100);

Смежные вопросы