我正在使用 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);
}
}
在終端視窗中,我看到結果為
message : 0
message : 1
message : 2
message : 3
message : 4
message : 5
message : 6
message : 7
message : 8
message : 9
在接收器部分,我的 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;
}
我希望在接收方的終端視窗中得到相同的結果。
我看到類似的結果
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 正在顯示來自舊緩沖區的訊息,這些訊息甚至還沒有初始化!有什么辦法可以按照我的意圖解決這個問題嗎?
uj5u.com熱心網友回復:
要解決的問題
檢查回傳值fgets()
根據需要進行簡化。
if (fgets(var,sizeof(var),fp)) {
printf("<%s>\n",var);
} else {
printf("Nothing this time.\n");
}
GTG
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/436281.html
