|
次のページ
前のページ
目次へ
2. はじめてみましょう2.1 デバッグの方法あなたが書いたコードをデバッグするための最も良い方法は,Linux マシンを
もう一台用意し,二台のコンピュータをヌルモデムケーブルで接続することで
す.miniterm(LDP プログラマーズガイド
( ヌルモデムケーブルを自作するには,TxD(送信)とRxD(受信)の結線をクロスさ せます.ケーブルについての詳しい解説は,Serial-HOWTO の第7章にあります. 未使用のシリアルポートが2つあるのならば,一台のコンピュータでこのテス
トを実行することもできます.この場合は,2つの仮想コンソールでそれぞれ
miniterm を実行します.シリアルマウスを外してシリアルポートを空ける場
合には, 2.2 ポートの設定
全てのパラメータはプログラム内で簡単に設定できます.設定は
ヘッダファイル
この<asm/termbits.h> ファイルには,フラグの定義も全て記
述されています.c_iflag フラグには入力モードのフラグがいくつ
か含まれており,全ての入力処理を指定します.入力処理とは,デバイスから
送られたキャラクタは,read で読み出される前に処理することがで
きるということです.同様に,c_oflag は出力処理を扱います.
c_cflag は,ボーレートや文字毎のビット数,ストップビットなどの
ポート設定を記録しています.c_lflag 内のローカルモードフラグ
は,文字がエコーされるかどうか,プログラムにシグナルが送られるかどうか
等を指定します.最後に,配列 c_cc では,ファイル終端,stop 等
の制御文字を定義します.制御文字のデフォルト値は
<asm/termios.h> で定義されています.各フラグについては,
オンラインマニュアルの termios(3) に説明があります.構造体
termios は POSIX 準拠のシステムでは用いられない,
c_line 要素を含んでいます.
2.3 シリアルデバイスにおける入力の概念ここでは,3つの異なる種類の入力の概念を説明します.利用目的に従って,
適切なものを選択してください.文字列全体を取得するのに,1文字読み込み
のループを使うことはできる限り避けるべきです.私はこれをやったとき,
読み込み時に カノニカル入力処理これは端末に対しての通常の処理モードですが,他のデバイスとの通信の時に
も便利です.全ての入力は行単位で処理されます.つまり, カノニカル入力処理では,消去(erase),単語の削除(delete word),文字の再
出力(reprint characters), 非カノニカル入力処理非カノニカル入力処理は,read 毎に決まった数の文字を扱う方法で,キャラ クタタイマを利用することもできます.このモードはアプリケーションが決まっ た文字数のキャラクタを読み込む時や,接続したデバイスが大量の文字を送っ てくる場合に使用します. 非同期入力上記2つのモードは,同期及び非同期モードで使うことができます.デフォル
トは,入力がうまくいくまで 複数入力からの入力待ちこれは別の入力モードというわけではありませんが,複数のデバイスを扱う時 に便利です.筆者のアプリケーションでは,TCP/IP ソケット経由の入力と他 のコンピュータからのシリアル接続経由の入力を擬似的に同時に扱っています. 以下に示すプログラム例では,異なる2つの入力ソースからの入力待ちを行い ます.片方のソースからの入力が可能になると,その入力が処理され,プログ ラムは次の入力を待ちます. 以下に示すアプローチはちょっと複雑に見えますが,Linux はマルチプロセッ
シング OS であることを忘れてはいけません. 次のページ 前のページ 目次へ |
[ |