[Overview][Constants][Types][Procedures and functions][Variables] Reference for unit 'oldlinux' (#rtl)

Select

Wait for events on file descriptors

Declaration

Source position: line 0

function Select(

  N: LongInt;

  readfds: pfdset;

  writefds: pfdset;

  exceptfds: pfdset;

  TimeOut: ptimeval

):LongInt;

function Select(

  N: LongInt;

  readfds: pfdset;

  writefds: pfdset;

  exceptfds: pfdset;

  TimeOut: LongInt

):LongInt;

Description

Selectchecks one of the file descriptors in the FDSetsto see if its status changed.

readfds, writefdsand exceptfdsare pointers to arrays of 256 bits. If you want a file descriptor to be checked, you set the corresponding element in the array to 1. The other elements in the array must be set to zero. Three arrays are passed : The entries in readfdsare checked to see if characters become available for reading. The entries in writefdsare checked to see if it is OK to write to them, while entries in exceptfdsare cheked to see if an exception occorred on them.

You can use the functions FD_ZEROFD_Clr, FD_Setor FD_IsSetto manipulate the individual elements of a set.

The pointers can be Nil.

Nis the largest index of a nonzero entry plus 1. (= the largest file-descriptor + 1).

TimeOutcan be used to set a time limit. If TimeOutcan be two types :

  1. TimeOutis of type PTimeand contains a zero time, the call returns immediately. If TimeOutis Nil, the kernel will wait forever, or until a status changed.
  2. TimeOutis of type Longint. If it is -1, this has the same effect as a Timeoutof type PTimewhich is Nil. Otherwise, TimeOutcontains a time in milliseconds.

When the TimeOut is reached, or one of the file descriptors has changed, the Selectcall returns. On return, it will have modified the entries in the array which have actually changed, and it returns the number of entries that have been changed. If the timout was reached, and no decsriptor changed, zero is returned; The arrays of indexes are undefined after that. On error, -1 is returned.

Errors

On error, the function returns -1, and Errors are reported in LinuxError :

SYS_EBADF
An invalid descriptor was specified in one of the sets.
SYS_EINTR
A non blocked signal was caught.
SYS_EINVAL
Nis negative or too big.
SYS_ENOMEM
Selectwas unable to allocate memory for its internal tables.

See also

SelectText

  

Wait for event on typed ontyped file.

GetFS

  

Return file selector

FD_ZERO

  

Clear all file descriptors in set

FD_Clr

  

Clears a filedescriptor in a set

FD_Set

  

Set a filedescriptor in a set

FD_IsSet

  

Check whether a filedescriptor is set

Example

Program Example33;

{ Program to demonstrate the Select function. }

Uses oldlinux;

Var FDS : FDSet;

begin
  FD_Zero (FDS);
  FD_Set (0,FDS);
  Writeln ('Press the <ENTER> to continue the program.');
  { Wait until File descriptor 0 (=Input) changes }
  Select (1,@FDS,nil,nil,nil);
  { Get rid of <ENTER> in buffer }
  readln;
  Writeln ('Press <ENTER> key in less than 2 seconds...');
  FD_Zero (FDS);
  FD_Set (0,FDS);
  if Select (1,@FDS,nil,nil,2000)>0 then
    Writeln ('Thank you !')
    { FD_ISSET(0,FDS) would be true here. }
  else
    Writeln ('Too late !');
end.