I am trying to redirect all serial data to a process in VxWorks. Using the following code
fd = open("/tyCo/0", O_RDWR,0);
ioctl(fd, FIOSETOPTIONS, OPT_TERMINAL & ~OPT_7_BIT);
read(fd, line, 100);
gives the correct input, except the first character entered is not populated, but is printed to the terminal. So if I enter "Hello", "H" is printed out and line="ello". If I don't enter anything and hit the return key, I get a prompt from the VxWorks Shell.
I think that the VxWorks Shell is intercepting the first letter of the data. My guess is that I have to redirect STDIO to the new process only, but all the documentation I've found on that says to use ioGlobalStdSet() which is unavailable in VxWorks 6.4 RTP. How can I either redirect STDIO or kill the VxWorks Shell from my process?
One work-around is to use ioGlobalStdSet to redirect the IO to a pipe. Then, in the RTP, open the pipe in read mode.
Off the top of my head - In the Kernel:
In the RTP:
rtpFd = open("/pipe/input", O_RD, 0); read(rtpFd, line, 100);
Disabling the shell during VxWorks configuration and compilation removed the problem permanently. It is also possible to enter exit at the shell to temporarily disable it.
If you want to redirect all task's outputs to the current login shell, what I think answer is: