2011-03-17 14 views
0

我不知道如何去創造 應用 一組命令,可能包含在一個shell腳本,其中:Linux應用程序接收數據絡繹不絕,解析和輸出文本

  • 接收二進制數據的恆定流(從連接到串行端口的氣象站,如果你想知道),
  • 識別圖案(例如這個字節是0x9F,所以接下來的33個字節是溫度數據),
  • 解析數據(例如,字節2的低半字節的三位與高筆尖組合字節1的低半字節以℃表示溫度),並且輸出文本(例如,字節1)。 t0 350t0其中只是一個傳感器ID,並且350是在1/10℃的溫度下)

環境是Linux(Debian的,2.6.32-5-柯克伍德),其內我只是一個初學者。

我想在linux中做這種事情有一種慣用的方式。我願意學習必要的工具,如果有人能指出我的正確軌道。特別是,我想知道如何處理按位操作(除非我使用C++)和一個常量輸入流。

理想情況下,與使用現有的linux命令/庫相比,我編寫的代碼量要小。

我不想使用單聲道,儘管事實上我知道C#很好,只是因爲我必須在設備上建立單聲道(這是一個SheevaPlug),它需要很長時間並且容易出錯(對我而言)。另外,我還沒有想到插件的交叉編譯。

(這是一個插件,以便meteohub從WM918/WX200氣象站記錄的數據,如果你很好奇。)

回答

0

任何Unix/Linux系統的核心理念是「一切皆文件」 。因此,您連接到氣象站的串行端口將由/dev/目錄中的設備文件表示。您可以使用大多數任何語言支持的標準fopen/fread/fclose類型函數來讀取它。

從這一點上來說,它只是一個做任何處理與數據流的問題。

+0

我被沿着線思維更'(stty的原料;貓> received.bin)<的/ dev/ttyUSB0'除了代替具有串行端口的輸出去到一個文件,它會去我的申請。這樣的應用程序只是一個解析器。使用像stty這樣的內置命令就是我對這個問題的'慣用'linux解決方案的含義。謝謝,不過。 – Pat 2011-03-17 17:45:25

1

因爲我一直做的事情了艱辛的道路,我會寫一個20行的C程序做這個任務:

  1. fopen()函數的氣象數據輸入串行設備; fopen()輸出設備,不管它是什麼;
  2. 永遠循環fread()那天氣數據串口設備;
  3. 做逐位/按字節天氣數據操作;
  4. fwrite()輸出設備;環
  5. 結束永遠

是的,你可以寫一個shell腳本,做一些,但我認爲你將不得不代碼至少位/字節操作的一部分。

- 皮特

+0

是的,我在想我必須在C/C++/Python中編寫位操作的東西。我剛開始學習'awk',但它的按位操縱器對我來說更難。 – Pat 2011-03-17 17:48:29

相關問題