Keep It Simple, Stupid | |
PerlMonks |
perlfunc:ioctlby gods (Initiate) |
on Aug 24, 1999 at 22:42 UTC ( [id://273]=perlfunc: print w/replies, xml ) | Need Help?? |
ioctlSee the current Perl documentation for ioctl. Here is our local, out-dated (pre-5.6) version: ioctl - system-dependent device control system call
ioctl FILEHANDLE,FUNCTION,SCALAR
Implements the
require "ioctl.ph"; # probably in /usr/local/lib/perl/ioctl.ph
first 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
<sys/ioctl.h>. (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
require 'ioctl.ph'; $getp = &TIOCGETP; die "NO TIOCGETP" if $@ || !$getp; $sgttyb_t = "ccccs"; # 4 chars and a short if (ioctl(STDIN,$getp,$sgttyb)) { @ary = unpack($sgttyb_t,$sgttyb); $ary[2] = 127; $sgttyb = pack($sgttyb_t,@ary); ioctl(STDIN,&TIOCSETP,$sgttyb) || die "Can't 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(...)) || ($retval = -1); printf "System returned %d\n", $retval;
The special string `` |
|