Perl5 リファレンス



       ioctl FILEHANDLE,FUNCTION,SCALAR
               Implements the ioctl(2) function.  You'll probably
               first have to say

                   require "ioctl.ph"; # probably in /usr/local/lib/perl/ioctl.ph

               to get the correct function definitions.  If
               ioctl.ph doesn't exist or doesn't have the correct
               definitions you'll have to roll your own, based on
               your C header files such as .  (There
               is a Perl script called h2ph that comes with the
               Perl kit that may help you in this, but it's
               nontrivial.)  SCALAR will be read and/or written
               depending on the FUNCTION--a pointer to the string
               value of SCALAR will be passed as the third
               argument of the actual `ioctl' call.  (If SCALAR
               has no string value but does have a numeric value,
               that value will be passed rather than a pointer to
               the string value.  To guarantee this to be true,
               add a `0' to the scalar before using it.)  The
               `pack' and `unpack' functions may be needed to
               manipulate the values of structures used by
               `ioctl'.

               The return value of `ioctl' (and `fcntl') is as
               follows:

                       if OS returns:          then Perl returns:
                           -1                    undefined value
                            0                  string "0 but true"
                       anything else               that number

               Thus Perl returns true on success and false on
               failure, yet you can still easily determine the
               actual value returned by the operating system:

                   $retval = ioctl(...) || -1;
                   printf "System returned %d\n", $retval;

               The special string "`0' but true" is exempt from
               -w complaints about improper numeric conversions.

               Here's an example of setting a filehandle named
               `REMOTE' to be non-blocking at the system level.
               You'll have to negotiate `$|' on your own, though.

                   use Fcntl qw(F_GETFL F_SETFL O_NONBLOCK);

                   $flags = fcntl(REMOTE, F_GETFL, 0)
                               or die "Can't get flags for the socket: $!\n";

                   $flags = fcntl(REMOTE, F_SETFL, $flags | O_NONBLOCK)
                               or die "Can't set flags for the socket: $!\n";


Perl5リファレンスに戻る