📄 ioctl.h
字号:
/* Copyright (C) 1996 DJ Delorie, see COPYING.DJ for details */#ifndef __dj_include_sys_ioctl_h_#define __dj_include_sys_ioctl_h_#ifdef __cplusplusextern "C"{#endif#ifndef __dj_ENFORCE_ANSI_FREESTANDING#ifndef __STRICT_ANSI__#ifndef _POSIX_SOURCE/*** plain ioctl functions. Do not use them.** Never. Really _N_E_V_E_R_. Unless you really know what** you are doing.***/#define DOS_PLAIN_GETDEVDATA 0x00#define DOS_PLAIN_SETDEVDATA 0x01#define DOS_PLAIN_RCVDATA 0x02#define DOS_PLAIN_SNDDATA 0x03#define DOS_PLAIN_RCVCTLDATA 0x04#define DOS_PLAIN_SNDCTLDATA 0x05#define DOS_PLAIN_CHKINSTAT 0x06#define DOS_PLAIN_CHKOUTSTAT 0x07#define DOS_PLAIN_ISCHANGEABLE 0x08#define DOS_PLAIN_ISREDIRBLK 0x09#define DOS_PLAIN_ISREDIRHND 0x0a#define DOS_PLAIN_SETRETRY 0x0b#define DOS_PLAIN_GENCHARREQ 0x0c#define DOS_PLAIN_GENBLKREQ 0x0d#define DOS_PLAIN_GLDRVMAP 0x0e#define DOS_PLAIN_SLDRVMAP 0x0f#define DOS_PLAIN_QGIOCTLCAPH 0x10#define DOS_PLAIN_QGIOCTLCAPD 0x11/*** Flags for DOS commands*/#define DOS_XFER 0x8000 /* use xfer buffer */#define DOS_RETMASK 0x7000 /* Here we put the bits to tell */ /* what to return. 8 possible values */#define DOS_BRAINDEAD 0x0400 /* CX does not hold the number of */ /* bytes to transfer */#define DOS_XINARGS(a) ((a & 3)<<12) /* How many extra args we expect. */#define DOS_RETAX 0x1000 /* return AX as result */#define DOS_RETDX 0x2000 /* return DX as result */#define DOS_RETDISI 0x3000 /* return DI SI as result *//*** DOS ioctls we support:*/#define DOS_GETDEVDATA (DOS_PLAIN_GETDEVDATA| DOS_RETDX|DOS_XINARGS(0))#define DOS_SETDEVDATA (DOS_PLAIN_SETDEVDATA| DOS_XINARGS(1))#define DOS_RCVDATA (DOS_PLAIN_RCVDATA |DOS_XFER|DOS_RETAX|DOS_XINARGS(1))#define DOS_SNDDATA (DOS_PLAIN_SNDDATA |DOS_XFER|DOS_RETAX|DOS_XINARGS(1))#define DOS_RCVCTLDATA (DOS_PLAIN_RCVCTLDATA|DOS_XFER|DOS_RETAX|DOS_XINARGS(1))#define DOS_SNDCTLDATA (DOS_PLAIN_SNDCTLDATA|DOS_XFER|DOS_RETAX|DOS_XINARGS(1))#define DOS_CHKINSTAT (DOS_PLAIN_CHKINSTAT | DOS_RETAX)#define DOS_CHKOUTSTAT (DOS_PLAIN_CHKOUTSTAT| DOS_RETAX)#define DOS_ISCHANGEABLE (DOS_PLAIN_ISCHANGEABLE| DOS_RETAX)#define DOS_ISREDIRBLK (DOS_PLAIN_ISREDIRBLK| DOS_RETDX)#define DOS_ISREDIRHND (DOS_PLAIN_ISREDIRHND| DOS_RETDX)#define DOS_SETRETRY (DOS_PLAIN_SETRETRY| DOS_XINARGS(1))/*These ones do not fit into my scheme, because they _DO_NOT_ put the sizeof the xfer buffer in CX. Aaaaargh*/#define DOS_GENCHARREQ (DOS_PLAIN_GENCHARREQ|DOS_BRAINDEAD|DOS_RETDISI)#define DOS_GENBLKREQ (DOS_PLAIN_GENBLKREQ |DOS_BRAINDEAD|DOS_RETAX)#define DOS_GLDRVMAP (DOS_PLAIN_GLDRVMAP| DOS_RETAX)#define DOS_SLDRVMAP (DOS_PLAIN_SLDRVMAP| DOS_RETAX)#define DOS_QGIOCTLCAPH (DOS_PLAIN_QGIOCTLCAPH| DOS_RETAX)#define DOS_QGIOCTLCAPD (DOS_PLAIN_QGIOCTLCAPD| DOS_RETAX)#define __IS_UNIX_IOCTL(a) ((a) & 0xd0000000U)#if 0/*** UNIX stuff**** This is subject to major changes in the near future.** Do not use it yet.*//*** __WARNING__ :** This ifdef works for DJGPP, because its io.h** defines __djgpp_include_io_h_*/#ifndef _IO/** Ioctl's have the command encoded in the lower word,* and the size of any in or out parameters in the upper* word. The high 2 bits of the upper word are used* to encode the in/out status of the parameter; for now* we restrict parameters to at most 128 bytes.*/#define IOCPARM_MASK 0x7f /* parameters must be < 128 bytes */#define IOC_VOID 0x20000000 /* no parameters */#define IOC_OUT 0x40000000 /* copy out parameters */#define IOC_IN 0x80000000 /* copy in parameters */#define IOC_INOUT (IOC_IN|IOC_OUT)/* the 0x20000000 is so we can distinguish new ioctl's from old */#define _IO(x,y) (IOC_VOID|(x<<8)|y)#define _IOR(x,y,t) (IOC_OUT|((sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y)#define _IOW(x,y,t) (IOC_IN|((sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y)/* this should be _IORW, but stdio got there first */#define _IOWR(x,y,t) (IOC_INOUT|((sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y)#endif /* _IO *//* Common ioctl's for all disciplines which are handled in ttiocom */enum tty_ioctl { TXISATTY = ('X'<<8), /* quick path for isatty */ TXTTYNAME, /* quick path for ttyname */ TXGETLD, /* get line discipline */ TXSETLD, /* set line discipline */ TXGETCD, /* get control disciplines */ TXADDCD, /* add control discipline */ TXDELCD, /* delete control discipline */ TXSBAUD, /* set integer baud rate */ TXGBAUD, /* get integer baud rate */ TXSETIHOG, /* set the input buffer limit */ TXSETOHOG, /* set the output buffer limit */ TXGPGRP, /* get p grp with posix security */ TXSPGRP /* set p grp with posix security */};#define TTNAMEMAX 32 /* used with TXGETLD, et al */union txname { /* used with TXGETCD */ int tx_which; /* which name to get -- inbound */ char tx_name[TTNAMEMAX];/* the name -- outbound */};/* * window size structure used with TXSETWIN and TXGETWIN. This is * exactly the same as the Berkeley structure and can be used with * TIOCSWINSZ and TIOCGWINSZ -- in fact they are defined to be the * same. */struct winsize { unsigned short ws_row; /* rows, in characters */ unsigned short ws_col; /* columns, in characters */ unsigned short ws_xpixel; /* horizontal size, pixels */ unsigned short ws_ypixel; /* vertical size, pixels */};struct tchars { char t_intrc; /* interrupt */ char t_quitc; /* quit */ char t_startc; /* start output */ char t_stopc; /* stop output */ char t_eofc; /* end-of-file */ char t_brkc; /* input delimiter (like nl) */};struct ltchars { char t_suspc; /* stop process signal */ char t_dsuspc; /* delayed stop process signal */ char t_rprntc; /* reprint line */ char t_flushc; /* flush output (toggles) */ char t_werasc; /* word erase */ char t_lnextc; /* literal next character */};/** Structure for TIOCGETP and TIOCSETP ioctls.*/struct sgttyb { char sg_ispeed; /* input speed */ char sg_ospeed; /* output speed */ char sg_erase; /* erase character */ char sg_kill; /* kill character */ short sg_flags; /* mode flags */};/* * Pun for SUN. */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -