In message <200109251459.f8PExBO20666 / sharui.nakada.kanuma.tochigi.jp>
	on Wed, 26 Sep 2001 00:05:11 +0900,
	nobu.nakada / nifty.ne.jp wrote:
> > BSD系のOSのselect(2)では、
> > 
> >      requested operation.  select() returns the total number of ready descrip-
> >      tors in all the sets.
> > 
> > と書かれていますので、重複というよりも合計なんでしょう。:-)
> 
>  てことは3つの数を単純に足してしまってOK?
「元の問題」はあんまり理解してませんが。

もっと細かくソースを追えば、カーネルのselect(2)に対応したsys_select()
の下請け関数selscan()では、

	n = 0;
	for (msk = 0; msk < 3; msk++) {
		for (i = 0; i < nfd; i += NFDBITS) {
			ibits = *ibitp++;
			obits = 0;
			while ((j = ffs(ibits)) && (fd = i + --j) < nfd) {
				ibits &= ~(1 << j);
				if ((fp = fd_getfile(fdp, fd)) == NULL)
					return (EBADF);
				FILE_USE(fp);
				if ((*fp->f_ops->fo_poll)(fp, flag[msk], p)) {
					obits |= (1 << j);
					n++;
				}
				FILE_UNUSE(fp, p);
			}
			*obitp++ = obits;
		}
	}
	*retval = n;

というコードの破片があります。(/usr/src/sys/kern/sys_generic.cより)
n はselect(2)の戻り値になり得る値で、msk は各セットのループ、といった
感じでなんとなく想像できますよね。

--
神戸 隆博(かんべ たかひろ) at home