2012-04-24 2 views
0

모든 시리얼 데이터를 VxWorks의 프로세스로 리디렉션하려고합니다. 다음 코드리디렉션 VxWorks 시리얼 입력

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

을 사용하여 채워지지 않은 입력 된 첫 번째 문자를 제외한 정확한 입력을 제공하지만, 상기 단말에 출력된다. 그래서 "Hello"를 입력하면 "H"가 출력되고 line = "ello"가 출력됩니다. 아무 것도 입력하지 않고 리턴 키를 누르면 VxWorks 쉘에서 프롬프트됩니다.

VxWorks 셸이 데이터의 첫 문자를 가로 채고 있다고 생각합니다. 내 생각 엔 STDIO를 새 프로세스에만 리디렉션해야하지만 모든 documentation에서 VxWorks 6.4 RTP에서 사용할 수없는 ioGlobalStdSet()을 사용한다고합니다. STDIO를 리디렉션하거나 프로세스에서 VxWorks 셸을 제거하려면 어떻게합니까?

답변

0

VxWorks 구성 및 컴파일 중에 셸을 비활성화하면 문제가 영구적으로 제거됩니다. 쉘에서 exit를 입력하여 일시적으로 비활성화 할 수도 있습니다.

0

하나의 해결 방법은 ioGlobalStdSet을 사용하여 IO를 파이프로 리디렉션하는 것입니다. 그런 다음 RTP에서 파이프를 읽기 모드로 엽니 다. 내 머리 위로 떨어져

- 커널에서 다음 RTP에서

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

:

rtpFd = 개방 ("/ 파이프/입력"O_RD, 0); 읽기 (rtpFd, line, 100);