#ifndef _STROPTS_H #define _STROPTS_H 1 // https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stropts.h.html #include __BEGIN_DECLS #define __need_uid_t #define __need_gid_t #include typedef uint32_t t_uscalar_t; typedef int32_t t_scalar_t; struct bandinfo { int bi_flag; /* Flushing type. */ unsigned char bi_pri; /* Priority band. */ }; struct strbuf { char* buf; /* Pointer to buffer. */ int len; /* Length of data. */ int maxlen; /* Maximum buffer length. */ }; struct strpeek { struct strbuf ctlbuf; /* The control portion of the message. */ struct strbuf databuf; /* The data portion of the message. */ t_uscalar_t flags; /* RS_HIPRI or 0. */ }; struct strfdinsert { struct strbuf ctlbuf; /* The control portion of the message. */ struct strbuf databuf; /* The data portion of the message. */ int fildes; /* File descriptor of the other STREAM. */ t_uscalar_t flags; /* RS_HIPRI or 0. */ int offset; /* Relative location of the stored value. */ }; struct strioctl { int ic_cmd; /* ioctl() command. */ char* ic_dp; /* Pointer to buffer. */ int ic_len; /* Length of data. */ int ic_timout; /* Timeout for response. */ }; struct strrecvfd { int fd; /* Received file descriptor. */ gid_t gid; /* GID of sender. */ uid_t uid; /* UID of sender. */ }; #define FMNAMESZ 128 struct str_mlist { char l_name[FMNAMESZ+1]; /* A STREAMS module name. */ }; struct str_list { struct str_mlist* sl_modlist; /* STREAMS module names. */ int sl_nmods; /* Number of STREAMS module names. */ }; #define I_ATMARK 1 #define I_CANPUT 2 #define I_CKBAND 3 #define I_FDINSERT 4 #define I_FIND 5 #define I_FLUSH 6 #define I_FLUSHBAND 7 #define I_GETBAND 8 #define I_GETCLTIME 9 #define I_GETSIG 10 #define I_GRDOPT 11 #define I_GWROPT 12 #define I_LINK 13 #define I_LIST 14 #define I_LOOK 15 #define I_NREAD 16 #define I_PEEK 17 #define I_PLINK 18 #define I_POP 19 #define I_PUNLINK 20 #define I_PUSH 21 #define I_RECVFD 22 #define I_SENDFD 23 #define I_SETCLTIME 24 #define I_SETSIG 25 #define I_SRDOPT 26 #define I_STR 27 #define I_SWROPT 28 #define I_UNLINK 29 #define FLUSHR 1 #define FLUSHRW 2 #define FLUSHW 3 #define S_BANDURG 1 #define S_ERROR 2 #define S_HANGUP 3 #define S_HIPRI 4 #define S_INPUT 5 #define S_MSG 6 #define S_OUTPUT 7 #define S_RDBAND 8 #define S_RDNORM 9 #define S_WRBAND 10 #define S_WRNORM 11 #define RS_HIPRI 1 #define RMSGD 1 #define RMSGN 2 #define RNORM 3 #define RPROTDAT 4 #define RPROTDIS 5 #define RPROTNORM 6 #define SNDZERO 1 #define ANYMARK 1 #define LASTMARK 2 #define MUXID_ALL 1 #define MORECTL 1 #define MOREDATA 2 #define MSG_ANY 3 #define MSG_BAND 4 #define MSG_HIPRI 5 int fattach(int, const char*); int fdetach(const char*); int getmsg(int, struct strbuf* __restrict, struct strbuf* __restrict, int* __restrict); int getpmsg(int, struct strbuf* __restrict, struct strbuf* __restrict, int* __restrict, int* __restrict); int ioctl(int, int, ...); int isastream(int); int putmsg(int, const struct strbuf*, const struct strbuf*, int); int putpmsg(int, const struct strbuf*, const struct strbuf*, int, int); __END_DECLS #endif