setitimer()を使用してシリアルポートで複数のブロッキング読み取りをタイムアウトさせました。読み込みが終了すると(またはタイムアウトが終了し、read()がEINTを返します)、私は別のメッセージを書き、アラームを再起動して再度読み込みを開始します。しかし、私は今問題が発生しました。アラームが2回の読み取りの間に期限切れになったら、どうすればいいですか?私は今停止したいですが、私はちょうど次の読んでそれに行くでしょう。 (いくつかのフラグを設定すると、「フラグと読み取りの間にアラームが期限切れになったら、どうすればよいですか」という質問に変わります)。複数の読み取りがアラームによって中断されました
-2
A
答えて
0
あなたがしたいことをする方法はありますが、醜い。
- パイプを作成します。その書き込み終了を閉じます。そうすれば、死んで無駄なディスクリプタを得ることができます。
- シリアルポートのディスクリプタをとり、
dup
コピーを保存します。 - 割り込みハンドラで、
dup2
シリアルポート記述子のデッドディスクリプタ。これにより、次のread
またはwrite
が失敗し、関数が返されます。 - 物事を正常に戻すために、
dup2
は、あなたが殺したものよりもシリアルポート記述子の保存されたコピーを保存します。
+0
あなたはまだ私を得ない:/。私は1つの読書を中断したくない。私は複数の読み込み()からなる関数を言うことを中断させたい(そして(あまりにも)書き込む)。 read()の途中でアラームが「鳴る」と、タイムアウト時にEINTR antのリターンエラーを追跡できますが、私がread()していないときにアラームが「鳴っている」ときは、エラーをすぐに返したいと思います。 – Charlestone
+0
私の更新を参照してください。それはそれを行う必要があります。 –
関連する問題
- 1. 読み取りエラー:#<Errno :: ECONNABORTED:ホストマシンのソフトウェアによって確立された接続が中断されました>> ruby
- 2. 読み取り中にデータリーダーを中断できますか?
- 3. javax.xml.stream.XMLStreamReaderによって読み取られたバイト数を取得します。
- 4. トランスポート接続からデータを読み取ることができません:WSACancelBlockingCallの呼び出しによってブロック操作が中断されました
- 5. XMLの読み取り中にエラーが発生しました
- 6. PyQTズームがmouseMoveEvent()によって中断されました。なぜですか?
- 7. cassandraが複数の読み取り要求を読み取る
- 8. gdb:pythonによってロードされた共有ライブラリの中断
- 9. 上流の読み取り中にreadv()が失敗しました(104:ピアによって接続がリセットされました)
- 10. アンドロイドソケット書き込み中断読み取り
- 11. モバイルSafari - JavaScriptのクリックイベントによってコピーアンドペーストが中断される
- 12. Excelが別のユーザーによって変更されています。読み取り専用として開く
- 13. 「0が受け入れられなかったために中断されました」と反応ホットローダーでフルページが読み込まれる
- 14. リソースの読み込みに失敗しました:フレームロード中断 - Agian
- 15. 複数のファイルを読み込み中
- 16. Network LocationProviderを使用した複数の読み取り
- 17. Google Cloud Storageからの読み取り中にエラーが発生しました
- 18. ドロップダウンのオプションがWebdriverによって読み取られない
- 19. WCF RESTの着信要求を読み取る中断割り込み
- 20. ピアによって閉じられたソケットからの読み取り
- 21. bashは読み取りループ内でネストされた読み取りをサポートしていますか?
- 22. Android NFC読み取りタグの問題。受け取ったデータのたびにアクティビティが開始されます
- 23. コミットされたファントム読み取り(Spring)
- 24. コードビハインドでjavascriptによってmaniuplatedされたリストの値を読み取る
- 25. 複数のスレッドによる読み取り操作中にロックが必要ですか?
- 26. パイプからの読み取りがブロックされています
- 27. リダイレクトにより画像のアップロードが中断される
- 28. PHP DOMドキュメントLoadHTMLFileはかっこで中断されました
- 29. データが複製される前に、cassandraはどのように読み取りを処理しますか?
- 30. 読み取り中にC#リーダーが閉じられていますか?
コードはどこですか? [MCVE](http://www.stackoverflow.com/help/mcve)を見る必要があります。 [How to Ask](http://www.stackoverflow.com/help/how-to-ask)を参照してください。 – CodeMouse92
アラームは何を意味しますか?何かが間違っていることを意味しますか?もしそうなら、失敗に対処する必要はありませんか? –
"setitimer()を使ってタイムアウトしています"。タイムアウトを実装するより良い方法があります。入力が利用可能になるのを待つには、['select'](http://linux.die.net/man/2/select)を使用してください。 'select'はタイムアウトをサポートしています。 – kaylum