お世話になります。SunOS で作成されたシリアル通信プログラムを cygwin 環境に移植しているところです。
そのため、ioctl 関数や read 関数、write 関数などを使用します。また、このとき、termio 構造体を使って通信設定をするのですが、その中に以下のような (PENDIN) 設定をしているところがあります。これをコメントアウトしない限り、cygwin では、コンパイルエラーになります。termios.h を調べてみると、POSIX では定義されていないものでした。しかし、これを設定しない限り read 関数が失敗してしまいます。これに代わる設定方法をご存知のかたいませんか。
-------------------------------------------------------
#include <stdio.h>
#include <fcntl.h>
#include <termio.h>
struct termio termio_dis;
char rs[2];
char rd[2];
int stream;
stream = open("/dev/ttyS0", O_WRONLY);
ioctl(stream, TCGETA, &termio_dis);
termio_dis.c_cflag = B9600 | CS8 | CREAD;
termio_dis.c_iflag = IGNBRK;
termio_dis.c_oflag = OPOST;
termio_dis.c_lflag = PENDIN;
/* この PENDIN が termios.h には定義されていない。BSDや SunOS には定義されているのだが・・・。意味は、次の文字を読み込んだときに、入力キュー中の全文字を再表示する、だそうな。*/
termio_dis.c_cc[4] = 2;
ioctl(stream, TCSETA, &termio_dis);
ioctl(stream, TCFLSH, 2);
rs[0] = 0x72;
write(stream, rs, 1);
read(stream, rd, 2);
close(stream);
-------------------------------------------------------
|