与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
我正在使用 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()
根据需要进行简化。
if (fgets(var,sizeof(var),fp)) {
printf("<%s>\n",var);
} else {
printf("Nothing this time.\n");
}
GTG