ファイル記述子とposix/unix read()関数を使用して、C++のシリアルポートからバイトを読み取っています。この例では、シリアルポートから1バイトを読み取っています(わかりやすくするために、ボーレート設定と類似のものは省略されています)。
#include <termios.h>
#include <fcntl.h>
#include <unistd.h>
int main(void)
{
int fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY);
char buf[1];
int bytesRead = read(fd, buf, 1);
close(fd);
return 0;
}
/ dev / ttyS0に接続されているデバイスが情報を送信しない場合、プログラムはハングします。タイムアウトを設定するにはどうすればよいですか?
私はこのようにタイムアウトを設定しようとしました:
struct termios options;
tcgetattr(fd, &options);
options.c_cc[VMIN] = 0;
options.c_cc[VTIME] = 10;
tcsetattr(fd, TCSANOW, &options);
1秒のタイムアウトになるはずだと思っていましたが、違いはありません。私はVMINとVTIMEを誤解したと思います。VMINとVTIMEは何に使用されますか?
次に、Webを検索して、select()関数について話している人を見つけました。それが解決策ですか?もしそうなら、それを上記のプログラムにどのように適用して1秒のタイムアウトを作成しますか?
どんな助けでも大歓迎です。前もって感謝します :-)