The IOCTL function provides a thin wrapper over the UNIX ioctl(2) system call. IOTCL performs special functions on the specified file. The set of functions actually available depends on your version of UNIX and the type of file (tty, tape, disk file, etc.) referred to.

To use IOCTL, read the C programmer’s documentation describing the ioctl(2) function for the desired device and convert all constants and data to their IDL equivalents.


The following example prints the size of the terminal being used by the current IDL session. It is known to work under SunOS 4.1.2. Changes may be necessary for other operating systems or even other versions of SunOS.

; Variable to receive result. This structure is described in
; Section 4 of the SunOS manual pages under termios(4):
winsize = {row:0u, col:0u, xpixel:0u, ypixel:0u}
; The request code for obtaining the tty size, as determined by 
; reading the termios(4) documentation, and reading the system 
; include files in the /usr/include/sys directory:
; Make the information request. -1 is the IDL logical file unit for 
; the standard output:
ret = IOCTL(-1, TIOCGWINSZ, winsize)
; Output the results:
PRINT,winsize.row, winsize.col, $
   format='("TTY has ", I0," rows and ", I0," columns.")'

The following points should be noted in this example:

  • Even though we only want the number of rows and columns, we must include all the fields required by the TIOCGWINSIZ ioctl in the winsize variable (as documented in the termio(4) manual page). Not providing a large enough result buffer would cause IDL’s memory to be corrupted.
  • The value of TIOCGWINSZ was determined by examining the system header files provided in the /usr/include/sys directory. Such values are not always portable between major operating system releases.


Result = IOCTL( File_Unit [, Request, Arg] [, /BY_VALUE] [, /MT_OFFLINE] [, /MT_REWIND] [, MT_SKIP_FILE=[-]number_of_files] [, MT_SKIP_RECORD=[-]number_of_records] [, /MT_WEOF] [, /SUPPRESS_ERROR] )

Return Value

The value returned by the system ioctl function is returned as the value of the IDL IOCTL function.



The IDL logical unit number (LUN) for the open file on which the ioctl request is made.


A longword integer that specifies the ioctl request code. These codes are usually contained in C language header files provided by the operating system, and are not generally portable between UNIX versions. If one of the “MT” keywords is used, this argument can be omitted.


A named variable through which data if passed to and from ioctl. IOCTL requests usually request data from the system or supply the system with information. The user must make Arg the correct type and size. Errors in typing or sizing Arg can corrupt the IDL address space and/or make IDL crash. If one of the MT keywords is used, this argument can be omitted.


Note that the keywords below that start with “MT” can be used to issue commonly used magnetic tape ioctl() calls. When these keywords are used, the Request and Arg arguments are ignored and an be omitted. Magnetic tape operations not available via these keywords can still be executed by supplying the appropriate Request and Arg values. When issuing magnetic tape IOCTL calls different devices have different rules for which ioctl calls are allowed, and when. The documentation for your computer system explains those rules.


If this keyword is set, Arg is converted to a scalar longword and this longword is passed by value. Normally, Arg is passed to ioctl by reference (i.e., by address).


Set this keyword to rewind and unload a tape.


Set this keyword to rewind a tape.


Use this keyword to skip files on a tape. A positive value skips forward that number of files. A negative value skips backward.


Use this keyword to skip records on tape. A positive value skips forward that number of files. A negative value skips backward.


Set this keyword to write an EOF (“tape mark”) on the tape at the current location.


Set this keyword to log errors quietly and cause a value of -1 to be returned. The default is for IDL to notice any failures associated with the use of ioctl and issue the appropriate IDL error and halt execution.

Version History

Pre 4.0


See Also