kazama140206
2015年6月3日 13時20分
お世話になります。
CFが書込み中か、書込み終了となっているか
を知る方法はあるでしょうか?
装置の電源をOFF等する際 CFが書込み中か
判るようにしてほしいという要望への対応の為です。
装置にArmadilloを実装しています。
CF上のファイルを変更しファイルクローズした後も
デバイスへの実際の書込みは暫く続くという
認識です。
その間、書込み中なのか終了したのか、何か参照して
判断できる情報というのは有るものでしょうか?
Armadillo-9
linux-2.4.31-a9-3
atmark-dist-20061020
の環境の装置になります。
宜しく、お願いします。
コメント
kazama140206
KES)小西様
有難う御座います。
sync, fsync 参考に致します。
書込み動作自体はあまり変えずに
状況参照が出来ればと思っています。
>「CFカード」とのキーワードで気になったのですが、直接接続の方であっていますか?
はい、CFはArmadilloのCFスロットに直接接続の形です。
kupdateを知らなかったのですが
これが定期的にキャッシュがあるか見て
デバイスに書込む条件が発生したら
書込むという事をしてるもののようですね。
kupdateは書込み中のキャッシュデータが
あるか知っているという事になりますよね
kupdateをもうちょっと調べてみたいと思います。
有難うございました。
kes-konishi
KES)小西です。
余計なおせっかいかもしれませんが
> CF上のファイルを変更しファイルクローズした後も
> デバイスへの実際の書込みは暫く続くという
> 認識です。
の対策でファイルをブロッキングIOでオープンしているのであれば
以下の対策も有効かと思います。
ファイルオープン時にO_SYNCを指定すれば、ライトスルー同等(fsyncを毎回実施)
の書き込みで各システムコール(read、write、close)が動作すると思います。
また、書き込み完了までブロッキングされます。
ちなみにカーネル2.4なので、O_DSYNCは実装されていないと思われますので
ご注意を。。。
kazama140206
kes-konishi
2015年6月3日 13時58分
KES)小西です。
コマンド、システムコール共に
sync、fsyncを使用してはいかがでしょうか?
参考:
http://linuxjm.osdn.jp/html/LDP_man-pages/man2/sync.2.html
http://linuxjm.osdn.jp/html/LDP_man-pages/man2/fsync.2.html
共にブロッキングI/Fなので、キャッシュ吐き出し完了までブロッキングされるため、
吐き出し中か?の状態は見れません。
「CFカード」とのキーワードで気になったのですが、直接接続の方であっていますか?
USB接続の場合は、CFリーダライタのファーム内でのキャッシュの可能性が残りますので。。。
直接、ファイルキャッシュ吐き出しならpdflushを触るしかなくなりますが、難易度は上がります。
と思ったらLinux-2.4でしたので、kupdateですね。