SIGIOの解説をみると「I/Oが使用可能になった」との記述がありますが
これは例えばシリアルポートに当てはめると受信完了と送信可能の場合に発行
されるシグナルなのでしょうか?

A 回答 (2件)

>実はsigactionでSIGIO設定しfcntl(fd, F_SETOWN, getpid());で


>シリアルポートのデータ受信を認識しようとおもっているのですが
>もっと良い方法があるのでしょうか?

具体的なことがわからないので正確な判断はできませんが、
特に問題は無いと思いますが。
ただ、自分ではまだ使ったことがありませんので、
未確認です(^^;;

ただ、プログラム上というか、手順というか、その辺を試したり、確認したりする必要はあると思います。
受信完了がどういう意味かによりますが、
たとえば送信側が1024バイトを送信した場合は、
SIGIOが発生しても、その時に読み込めるデータは
おそらく1024バイトではありません。
場合によれば、1バイト受信しただけでSIGIOが発生するかも知れません。
それでいいかどうかです。

こういう場合に必ず1024バイト単位で処理をしたいなら、
別なプロセスなりスレッドなりでwait I/Oで
1024バイト読み込み、完了した時点で処理プロセスへ
シグナルなりなんなりで通知するというような
処理にすると思います。
こういう感じのプログラムなら何度か作ってます。
    • good
    • 0

受信完了という判断はできないと思うので、


受信データがあるという意味でしょう。
また、通常このシグナルは出ません。
http://www.linux.or.jp/JM/html/LDP_man-pages/man …
http://www.linux.or.jp/JM/html/LDP_man-pages/man …

参考URL:http://www.linux.or.jp/JM/html/LDP_man-pages/man …

この回答への補足

実はsigactionでSIGIO設定しfcntl(fd, F_SETOWN, getpid());で
シリアルポートのデータ受信を認識しようとおもっているのですが
もっと良い方法があるのでしょうか?

補足日時:2002/02/26 08:55
    • good
    • 0

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qシリアルポート増加

シリアルポートを増加したのですが、その増加した分のシリアルポートがきちんち認識されてるかどうか調べる方法はありますか? そこに接続する端末があればいいのでしょうが、今それが無いので無くても調べれる方法をご存じの方いらっしゃいましたら、お手数ですが教えていただけたら助かります。宜しくお願い致します。

Aベストアンサー

カテが『その他(Windows)』でWindowsのVersionが判らないので、幾つかの方法を挙げます。(WindowsのVersionによっては対応していないので悪しからず…)

(1).デバイスマネージャで確認する。
(2).DOS Command(のmode)で確認する。
(3).Portを増やしたとの事なので、複数在るはずなので、クロスケーブルを使い各Port間で通信してみる。
(4).測定器(最低でテスター、出来ればオシロスコープ)を接続し、擬似的に任意のコマンドを送信しRTSやDTSの信号を確認。

QFreeBSDでシリアルポート使用について

現在、SW・ルータなどをシリアル経由ログインし
設定していますが、その操作端末をFreeBSDでならねば
ならなくなりました。Windows系のOSではteratermなど
つかって簡単にシリアルログイン出来るのですが
FreeBSDの場合どうすればいいのでしょうか?
なにか漠然とした質問になってしまいましたが
よろしくお願いします。

Aベストアンサー

シリアルポートを直接いじりたいんだとすれば、tip コマンドでしょうか。
シリアルの場合、速度とかビット数とかどのポートかという設定が必要ですが、
/etc/remote や $REMOTE が指すファイルに記述します。
詳しくはマニュアルをどうぞ。

QI/O error: No such file or directory について

メールサーバ(OS=solaris2.6)の messages に
sendmail[14285]: g8O3jFb14285: SYSERR(root): errbody: I/O error: No such file or directory
というエラーが出ます。

また、上記メールID(g8O3jFb14285)で mailログを見てみると
sendmail[14285]: g8O3jFb14285: postmaster notify: Postmaster warning: Illegal character 0xffffffa9(ASCII変換エラー)
というエラーを吐き出しています。

また、上記エラーを吐き出した後
g8O3jFb14285: SYSERR(root): errbody: I/O error: No such file or directory
を吐き出しています。

その他にも
postmaster notify: Postmaster warning: Unbalanced '"
などもあります。(sendmail.cfによるもの?)

上記2つの意味の他、I/O error: No such file or directory
というエラーはどのような時に吐き出されるエラーなのでしょうか?

分かる方やヒントになるサイトを知っているがおりましたら、ご回答の方を宜しくお願い致します。

メールサーバ(OS=solaris2.6)の messages に
sendmail[14285]: g8O3jFb14285: SYSERR(root): errbody: I/O error: No such file or directory
というエラーが出ます。

また、上記メールID(g8O3jFb14285)で mailログを見てみると
sendmail[14285]: g8O3jFb14285: postmaster notify: Postmaster warning: Illegal character 0xffffffa9(ASCII変換エラー)
というエラーを吐き出しています。

また、上記エラーを吐き出した後
g8O3jFb14285: SYSERR(root): errbody: I/O error: No such file or dire...続きを読む

Aベストアンサー

ハードディスクが書き込めないようになっているように思えます。
読込可能であれば、今のうちに別の媒体にバックアップを取られた方がいいです。

複数のHDDを利用されているのであれば、HDDで、
テープドライブがついているのであればテープで、
なければネットワークに繋がっていると思うので同じセグメントに
ある別のサーバやクライアントのディスクスペースを使って
データを移された方がいいかと思います。
私は昔、そのハードディスクを他のサーバでマウントしてコピーしました。

いずれにせよ、早急に手だてを打たなければいけないですね。

QSolarisのレスポンス、スループット、I/O情報の取得について教えて下さい。

Solarisのレスポンス、スループット、I/O情報の取得について教えて下さい。
Sarでとるようなことを聞いたことがあるのですが、やり方がわかりません。
ほかの方法でも何でもいいので、詳しく教えて下さるとありがたいです。
昨日も同じ質問したのですが、どこに行ってしまったのかわからなくなってしまったのでもう一度質問しました。
これなら任せろ!というような方、ぜひ詳しく教えて下さい。
よろしくお願いします。

Aベストアンサー

自宅にはSolarisマシンを置いてないので,正確な回答ではなくアドバイスという形になるのですが…

コマンド名までわかっているのでしたら,コンソールから
$man sar
でコマンドマニュアルを表示させたり,AnswerBook内をsarで検索してみてはいかがでしょうか? 解決の糸口さえわかっていれば,これらオンラインドキュメントでほとんど解決できますよ。

Qシェルスクリプトの中であるプログラムにシグナルを送りたいとき

こんにちわ,

今シェルスクリプトの学習をしています。
シェルスクリプトのなかであるプログラムにSIGINTを送るシェルスクリプトを作るにはどうすればいいでしょうか。
たとえば,
./hogeというCプログラムがあり,その中でsignal関数を用いてSIGINTを捕らえるようなプログラムがなされているとき,
シェルスクリプトで

#!/bin/sh
./hoge &
PID=$$
sleep 2
kill SIGINT $PID

だと,$$にはこのシェル自体のPIDが返ってきているので,うまくいきません。

なんとか,./hogeをうごかし,その後何秒かあとにSIGNALを送るようなシェルスクリプトを作りたいのですが,どうすればいいでしょうか。

Cでforkさせて外部呼出しによって送るしかないのでしょうか。

よろしくお願いします。

Aベストアンサー

No2のtatsu99さんが書かれている通り、「$!」でバックグラウンド実行したプロセスのプロセスIDが取得できます。
ただし、これはBシェル(/bin/sh)の標準的な仕様であり、Linuxに限らずBシェルの動く環境であれば、ほぼ例外なく使える機能です。
もちろん、bashのようなBシェルの上位互換シェルでもつかえます。

ちなみに、このような特殊変数には他に、
$? 直前のコマンドの終了ステータス
$$ 実行中のシェルスクリプトのPID
$- Bシェルを制御するフラグの状態
などがあり、シェルスクリプトを使う際には非常に役に立ちます。


このカテゴリの人気Q&Aランキング

おすすめ情報