- ベストアンサー
int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)について
見当違いな質問かもしれませんがお願いします。 複数のソケットを監視する際にselectを使う場合のことですが、 selectの動作と戻り値について疑問があります。 http://www.linux.or.jp/JM/html/LDP_man-pages/man2/select.2.html ここを参照すると、selectの戻り値は 「更新された 3 つのディスクリプタ集合に含まれているディスクリプタの数 (つまり、 readfds, writefds, exceptfds 中の 1 になっているビットの総数) を返す。」 とあります。 私の中でselectは登録してあるFDのうち、一つでも動きがあれば即座にselectを抜けるもの、という認識です。 この認識だとreadfds,writefdsが引数として与えられているとしても、 どちらかのfd_setのうち、一つでも動きがあればselect文は 抜けてしまうことになります。とすると、戻り値として 「readfds, writefds, exceptfds 中の 1 になっているビットの総数」 は常に1ということになってしまいます。しかし、総数というからには 複数同時に1になることもあるはずです。 私の認識が間違っているとは思うのですが、どう間違っているのかわかりません。 select文の動きについて詳しく教えていただけないでしょうか。 または良いページがあれば教えてください。
- みんなの回答 (2)
- 専門家の回答
関連するQ&A
- #defineの使い方について
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strdup.3.html の書式のところに #define _GNU_SOURCE という一文があるのですが、これは何をしているのでしょうか。 #defineはマクロを定義するために使用するのは、 知っています。#define _GNU_SOURCEは _GNU_SOURCE のあとに 何も書かれていないのが不自然です。
- ベストアンサー
- C・C++・C#
- Linuxのperrorのpは何の意味?
Linuxのperrorのpは何の意味? プログラミングをしていて気になりました。 perror http://www.linux.or.jp/JM/html/LDP_man-pages/man3/perror.3.html
- ベストアンサー
- C・C++・C#
- MMAPのMAP_SHAREDについて
MMAPのMAP_SHAREDについての質問です。 下記ページのMAP_SHAREDの説明文に「ファイルの実際の更新は msync(2) または munmap() が呼ばれるまで行われないこともある。」とあるのですが、このケースは稀なケースなのでしょうか? また、どれくらいの頻度、発生条件などあるのでしょうか? http://linuxjm.sourceforge.jp/html/LDP_man-pages/man2/mmap.2.html
- 締切済み
- C・C++・C#
- Windowsでインターバル・タイマーの値を取得または設定する方法
Linuxで以下の関数を使えば、指定した時間にシグナルとして 指定した関数を呼ぶことが可能ですが、Windowsでは どのようにしたらよいのでしょうか? OsはWindowsXP32bitです。 参考:http://www.linux.or.jp/JM/html/LDP_man-pages/man2/getitimer.2.html #include <sys/time.h> int getitimer(int which, struct itimerval *value); int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);
- ベストアンサー
- C・C++・C#
- ”select”,”FD_ISSET”という関数はMicrosoft Visual C++ 2008 Express Editionで使えますか?
今、Microsoft Visual C++ 2008 Express Editionでソケット通信のサーバ、クライアントプログラムを作りたくていろいろ調べていて、特に複数クライアントが接続できるサーバを作りたいと思っています。 ただ、どうしてもrecv関数に入ると、1台の端末からのデータ受け取りでステップが停止してしまって、通信を占有してしまい、他のクライアントからのデータを受け付けることができないので、どうすればよいのかと思い、 ググッていたら http://x68000.q-e-d.net/~68user/net/c-echo-2.html このページにselect関数とFD_ISSET関数というのがあって、select関数の引数にデータを設定すれば、FD_ISSET関数の戻り値で作成したソケットに読み取り可能なデータがあるのかを検知できて、検知したらrecv関数でとれるので、これでrecv関数での立ち止まりがないので、複数のクライアントからのデータを行えるというプログラムを見つけました。 ただ、このFD_ISSET関数、select関数はまさにマルチスレッドのやり方だと思うので、Microsoft Visual C++ 2008 Express EditionではMFCがないとのことなのですが、使用することはできるのでしょうか?
- ベストアンサー
- その他(プログラミング・開発)
- difftime()について
difftime()は、秒数の差を返すものなのに、なんでdouble型を返す仕様になっているのでしょうか? double difftime(time_t time1, time_t time0); 関数 difftime() は時刻 time0 から時刻 time1 までの経過時間を double 型で返す。 2 つの時刻の値はカレンダー時間で指定する。カレンダー時間とは紀元 (協定世界時 (UTC) 1970年1月1日 00:00:00) からの経過秒数である。 http://www.linux.or.jp/JM/html/LDP_man-pages/man3/difftime.3.html
- 締切済み
- C・C++・C#
- set TImeout
<html> <head> <title>フェードインさせたい </title> <script language="JavaScript"> <!-- r_color="000123456789abcd"; g_color="0123456789abcdef"; b_color="000123456789abcd"; function fadein(pos,speed){ clearTimeout(timer1); r=r_color.charAt(pos); g=g_color.charAt(pos); b=b_color.charAt(pos); document.bgColor="#"+r+r+g+g+b+b; if(pos<15){ timer1=setTImeout("fadein("+(pos+1)+","+speed+")",speed); }else{ clearTImeout(timer1); } } //--> </script> </head> <body text"#000000"onLoad="timer1=setTimeout('fadein(0,100)',100)"> <font size="5">フェードインします</font> </body> </html> 以上のタグが今勉強している本に載っていたのですが 最初にonloadで呼び出された関数の中にClearTImeaout (11行目)にありますがそこでこの関数はとまって しまわないのでしょうか? また二つSettimeaoutがありますが二つとも識別する 単語がtimer1で同じですけどごっちゃにならないのでしょうか?
- ベストアンサー
- JavaScript
- htmlからphpへの値の受け渡しについて
いつも助けてもらってます。 今回も宜しくお願い致します。 現在、複数のhtmlページから一つのphpを呼び出しているのですが、 phpのselect文の中で各ページの持つ定数(変数?)を使用したいと考えています。 phpのselect文 SELECT * FROM ITEM WHERE ITEM_DIV = 各ページの定数(文字列) 各ページの定数は、必ず同じ物です(ダイエット、食品etc..) グーグルなどで調べた結果、 POSTやSESSION、FORMで出来そうな感じだったのですが、 渡すものがいつも決まっていて、かつ一つなので もっと簡単に渡せるんじゃないかな?と考えて投稿させてもらいました。 宜しくお願いします!!
- ベストアンサー
- PHP
- パケット通信時のIPヘッダの取得方法について
RedHat Linux9上で、g++3.2を使用して、ソケット通信の プログラムを作成していますが、UDPやTCPパケットを受信した際に 各パケットのIPヘッダを取得したいのですが、どのように行えばよいのでしょうか? RAWソケットを使用すればできるかとも思ったのですが、下記のURLに 「IPPROTO_RAW 経由でのあらゆる IP プロトコルの受信は、 raw ソケットを用いては行えない。」と書かれています。 http://www.linux.or.jp/JM/html/LDP_man-pages/man7/raw.7.html 上記のURLには、下記のようにも書かれていました。 packetソケットを使用しなければ実現できないのでしょうか? もし、そうならばpacketソケットのサンプルがありましたら、 教えていただけないでしょうか。 「IPPROTO_RAW ソケットは送信専用である。もしどうしてもすべての IP パケットを受信したい場合は、 packet(7) ソケットを ETH_P_IP プロトコルで用いること。」
- 締切済み
- C・C++・C#
- マクロで、改ページがうまく認識されません
マクロで、改ページがうまく認識されません Excel2002を使用しています。 1ページ内に収まるように作った「内訳明細書」の型があり、 複数ページに渡る時は、ボタンを押せば新しいページが下に追加される…という マクロを作りたいと思い、いろいろ調べながらやってみたのですがうまくいきません。 以下のように、 「シートの最後の改ページの次の行に、原紙シートからコピーしたフォームを貼り付ける」 としてみたのですが、 最後の改ページの後ろ側に何かしらのデータがある時は ちゃんと最後の改ページを認識するのに、それがない時は、そのひとつ手前の 改ページを最後の改ページとみなすようです。 これはこういうものなのでしょうか? 何か解決策がありましたら、お教え願います。 Sub 改ページを入れる() Sheets("内訳明細書").Select p = ActiveSheet.HPageBreaks.Count '改ページの総数 L = ActiveSheet.HPageBreaks(p).Location.Row '最後の改ページの行 Sheets("原紙").Select Rows("1:26").Select Selection.Copy Sheets("内訳明細書").Select Rows(L).Select ActiveSheet.Paste Range("A7").Select Sheets("原紙").Select Application.CutCopyMode = False 'コピーモードを解除 Range("A1").Select Sheets("内訳明細書").Select ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Activate '最後のセルをアクティブにする 最終行 = ActiveCell.Row + 1 'アクティブセルの行番号(+1) Worksheets("内訳明細書").Rows(最終行).PageBreak = xlPageBreakManual End Sub
- 締切済み
- オフィス系ソフト
お礼
いつもありがとうございます。 >selectを呼び出す以前にOKになっているFD あ。。言われてみればその通りでした。 適切なご回答大変助かりました。