アプリ版:「スタンプのみでお礼する」機能のリリースについて

シリアル通信について質問です。


デバイスオープンのところで、この関数で気になることがありました。

tcflush(fd, TCIFLUSH);


ネットではこのように説明されていました。

http://linuxjm.osdn.jp/html/LDP_man-pages/man3/t …

tcflush() は fd が行っているデータの出力でまだ転送されていないもの、あるいは受信し たがまだ入力していないものを破棄する。いずれを行うかは queue_selector の値で定める:

TCIFLUSH 受信したが読んでいないデータをフラッシュする。
TCOFLUSH 書いたが送信していないデータをフラッシュする。
TCIOFLUSH 受信したが読んでいないデータ・書いたが送信していないデータ両方 をフラッシュする。

ここでは、フラッシュは「転送」という意味になっていました。この説明を見ると、
受信と読み込み、書き込みと送信では意味が違うという説明がされていました。

僕は同じような意味なのかと思っていましたが実際違うのでしょうか。

この違いが分かる方、教えていただけると幸いです。
宜しくお願いします。

A 回答 (1件)

このような場合、フラッシュ (flush)とは、綺麗にするとか、洗い流すとか、そんな意味です。


https://dictionary.goo.ne.jp/srch/en/flush/m1u/

通信とか、ファイル入出力とかでは、逐次処理せずに、いったん溜めてから処理することがあります。

例えるなら、
出力: 葉書を書くけど、すぐに出さずに、何枚かまとまったら出しにいく
入力: 届いた葉書を、届いた瞬間にその場で読むのではなく、いったん郵便箱に溜めておいて、順番に読む
という感じです。


ですが、これで終わり、となったとき、あるいは、ここで一旦区切りをつけたい、というとき。
途中までで残ったものを処理する必要があります。

上の例では、出す前のたまった葉書、郵便箱にたまった葉書をキレイにするということです。

このような処理を、コンピュータ用語で「フラッシュ」と言います。


ここで、出力と入力とで、求められるものが違います。

出力は、中途半端だろうと、残ったものを送るのが自然です。
一枚の葉書でも、送ろうとして書いた以上は、実際に送りたいものです。
ですから、全部送信しきってしまう、というのが、出力に対するフラッシュとなります。

入力の方は、これ以上読む必要なくなったから、他に影響が無いように、キレイにするのがよいです。
郵便箱に残った葉書はいらないものです。
それを廃棄するのが、入力に対するフラッシュです。
(残っているデータが必要なら、そのまま読み続ければいいのであって、フラッシュは不要です)
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!