0

すべてのシリアル データを 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 を新しいプロセスのみにリダイレクトする必要がありますが、私が見つけたすべてのドキュメントでは、VxWorks 6.4 RTP では使用できない ioGlobalStdSet() を使用するように指示されています。STDIO をリダイレクトするか、プロセスから VxWorks シェルを強制終了するにはどうすればよいですか?

4

3 に答える 3

0

回避策の 1 つは、ioGlobalStdSet を使用して IO をパイプにリダイレクトすることです。次に、RTP でパイプを読み取りモードで開きます。

頭のてっぺんから-カーネル内:

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

RTP で:

rtpFd = open("/pipe/input", O_RD, 0); 読み取り (rtpFd、行、100);

于 2012-04-25T15:54:34.190 に答える
0

VxWorks の構成とコンパイル中にシェルを無効にすると、問題が完全に解消されました。シェルで exit を入力して一時的に無効にすることもできます。

于 2012-04-27T20:05:35.440 に答える