与C++进行串行通信时的缓冲区问题

buffer problem when making serial communication with C++

我正在使用 C++ 进行串行通信。我正在用 C++ 调用 linux 命令。我使用的一个端口用作发射器,另一部分用作接收器。

这就是变送器的工作原理,

#include <stdio.h>
#include <unistd.h>
#include <iostream>
#include <fstream>

using namespace std;

ofstream wfile;
char byte[40];
int n=0;

int main()
{
  while(true)
    {
      wfile.open("/dev/ttyUSB1");
      sprintf(byte,"message : %d\n",n);
      wfile << byte;
      wfile.close();
      printf("%s",byte);
      n++;
      sleep(1);
    }
}

在终端 window 中,我看到的结果是

message : 0
message : 1
message : 2
message : 3
message : 4
message : 5
message : 6
message : 7
message : 8
message : 9

在receiver部分,我的C++脚本写成

#include <stdio.h>
#include <stdlib.h>

int main()
{
  char var[100];
  FILE *fp;
  while(true)
    {
      fp=popen("cat /dev/ttyUSB0","r");
      fgets(var,sizeof(var),fp);
      printf("%s",var);
      pclose(fp);
    }
  return 0;
}

我希望在接收方的终端 window 上得到相同的结果。

我看到的结果类似于

message : 1
 1
 1
 1
 1
 1
 1
 1
 1
... (repeats about 100 time)

 1
 1
 1
message : 2







...(void for about 100 line)



message : 3






...


message : 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
: 4
...

像这样。我假设这是串口缓冲区的问题。此外,Receiver 正在显示来自甚至未初始化的旧缓冲区的消息!有什么方法可以按照我的意图解决这个问题吗?

需要解决的问题

检查 fgets()

的 return 值

根据需要进行简化。

if (fgets(var,sizeof(var),fp)) {
  printf("<%s>\n",var);
} else {
  printf("Nothing this time.\n");
}

GTG