Server for Information Technologies ������ ��������������
������� �������������� ����������
(095) 932-9212, 932-9213, 939-0783
E-mail: [email protected]
������ �������� ����(!) ������������� ���������� CIT Forum CD-ROM

STREAMIO(7)

��������
streamio - ���������� ������������������

���������

#include <stropts.h>

int ioctl (fildes, command, arg)
int fildes, command;

��������
���������� ������������������ [��. intro(2)]

����������� � ������� ���������� ������ ioctl(2), ��������������� �������� ��� ��������. ��������� command � arg ���������� � �����, ������������ ������������ ����� fildes � ���������������� ��� �������. ��������� ���������� ���������� ���������� ����� ������� ��� ��������� ������.

�������� fildes - ��� ���������� ��������� �����, ������������ �����. �������� command ������ ����������� �������, ��� ������� ����. �������� arg ������ �������������� ��������� ��� ���� �������. ��� ��������� arg ������� �� �������. ������ ��� int ��� ��������� �� �����-���� ���������.

��������� ���������� ������������������ �������������� � ������� ���������� ������ ioctl(2), ������, ��������� � ioctl(2), ��������� � � ���������� ������������������. � ���������� � ���� ������� ��������� ����� ����� ����������� ��������, � ���������� errno ������� �������� EINVAL, ���� �����, ������������ ������������ �����, ������������������, ���� �������� command ����� ��������, �� ���������� � ����� ������.

������ ����� �������������� �������� � ���������� ���������������. � ���� ������ ������ ��� ������� �������� ���������, ���������� ��� ������, ������ ������, ���������� errno ������������� ��������, ������ ���������� ���� ������, � ��������������� ��������� ����� ����������� ��������.

��������� ������� ���������� ������ ioctl(2) ��������� �� ���� �����������������.

I_PUSH
�������� ������, �� ��� �������� ��������� �������� arg, �� ������� ������, ������������� ���������� fildes, ����� ��� �������. ����� ���������� ��������� �������� ����������� ������. ��� ������� ���������� errno ��������� ���� �� ��������� ��������:
[EINVAL]
������������ ��� ������.
[EFAULT]
�������� arg ��������� �� ������� ����������� �������� ��������� ������������.
[ENXIO]
������ � ��������� �������� ����������� ������.
[ENXIO]
� ������ ��������� ������������ �����.
I_POP
������� ������, ������������� ����� ��� ������� ������, ������������� ���������� fildes. �������� arg ������ ��������� 0. ��� ������� ���������� errno ��������� ���� �� ��������� ��������:
[EINVAL]
� ������ ��� �� ������ ������.
[ENXIO]
� ������ ��������� ������������ �����.
I_LOOK
��������� ��� ������, �������������� ����� ��� ������� ������, ������������� ���������� fildes, � �������� ��� (��� ������� ��������, ������������� ������� ������) � �����, �� ������� ��������� �������� arg. ���� ����� ������ ����� ����� �� ����� FMNAMESZ + 1 ����. ��������� ���������� ���� <sys/ conf.h>. ��� ������� ���������� errno ��������� ���� �� ��������� ��������:
[EFAULT]
�������� arg ��������� �� ������� ����������� �������� ��������� ������������.
[EINVAL]
� ������ ��� �� ������ ������.
I_FLUSH
������� ������� ��� �������� �������, � ����������� �� �������� ��������� arg. ����������� �������� ��������� ��������:
FLUSHR
�������� ������� �������.
FLUSHW
�������� �������� �������.
FLUSHRW
�������� ������� � �������� �������.
��� ������� ���������� errno ��������� ���� �� ��������� ��������:
[EINVAL]
�������� arg �����������.
[EAGAIN]
�� ������� ��������� ������ ��� ������� ��������.
[ENXIO]
� ������ ��������� ������������ �����.
I_SETSIG
����������� ����� ������ � ���, ��� ������������ �����, ����� ���� ������� ��� ������ SIGPOLL [��. signal(2)sigset(2)]
, ����� � ������, ������������ ���������� fildes, ���������� ������������ �������. ����� ������� �������������� ����������� ����������� ������ � ������������������. �������� ��������� arg �������� ������ ������, �������� �������, ��� ����������� ������� ������������ ������ ���� ������ ������. ����� ������������ ����� ���������� ��� ��������� ��������:
S_INPUT
� ������� �� ������ ������, ������� ���� �� ����� ������, ��������� �������������� ���������. ��������� ������� ����� ��� ���� ���� ��������������.
S_HIPRI
� ������� �� ������ ������ ��������� ������������ ���������. ��������� ������� ����� ��� ���� ���� ��������������.
S_OUTPUT
� ������� �� ������ ������, ������� ���� �� ����� �����������, ��������� ��������� �����. ������������ ������������ � ����������� �������� ������ � �����.
S_MSG
��������� � ������� �� ������ ������ ����� ���������, ���������� ������ SIGPOLL.
���������� ����� �������� ������� ������ ��� ����������� ������������ ���������, ���� �� ������ � �������� ����� �������� S_HIPRI.

��������, �������� �������� ������ SIGPOLL, ������ ����������� ������ ������� I_SETSIG. ���� ��������� ��������� ��������� ������������ �� ����� � ��� �� �������� ������ � ���� �� ������, ��� ����������� ������� ������� ����� ������� ����.

���� �������� arg ����� 0, ������� ��������� �� ������ ���������, ������� ����� �������� ������ SIGPOLL.

��� ������� ���������� errno ��������� ���� �� ��������� ��������:

[EINVAL]
�������� arg ����������� ��� �������� arg ����� 0, �� ������� �� ����� �� ������ �������� ��� ������ SIGPOLL.
[EAGAIN]
�� ������� ��������� ������ ��� ��������� �������.
I_GETSIG
���������� �������, ������� ��������� � ������ � �� ������ �������� �������� ��� ������ ������ SIGPOLL. ������� ������������ � ���� ������ ����� �� ������, �� ������� ��������� �������� arg. �������� ��� �� ��, ��� � � ������� I_SETSIG [��. ����].

��� ������� ���������� errno ��������� ���� �� ��������� ��������:

[EINVAL]
������� �� ������ �������� ��� ������ SIGPOLL.
[EFAULT]
�������� arg ��������� �� ������� ����������� �������� ��������� ������������.
I_FIND
���������� ����� �������, ����������� � ������, � ������, �� ������� ��������� �������� arg. ���� ������ � ����� ������ ������������ � ������, �� ������������ 1, ���� ����������� - ������������ 0.

��� ������� ���������� errno ��������� ���� �� ��������� ��������:

[EFAULT]
�������� arg ��������� �� ������� ����������� �������� ��������� ������������.
[EINVAL]
��� ������, �� ������� ��������� arg, �����������.
I_PEEK
���� ����������� ������������ �������� ���������� � ������ ��������� � ������� �� ������ ������ ������ ��� �������� ������ ��������� �� �������. �������� arg ��������� �� ��������� ���� struct strpeek:
   struct strpeek {         
     struct strbuf ctlbuf; 
     struct strbuf databuf;
     long          flags;  
   };                       
���� ctlbuf.maxlen � databuf.maxlen [��. getmsg(2)] ������ ���� ����������� ������� ���������� ����������� ���� �� ����������� ������� � ������� ������ ��������������. ���� ���� flags ����� �������� RS_HIPRI, �� ������� �� ������ ������ ����� ����������� ������ ������������ ���������.

������� I_PEEK ���������� �������� 1, ���� ��������� ���� ���������. ��������� ����� 0, ���� � ������� �� ������ ������ ��� ��������� ��� ���� ���������� ���� RS_HIPRI, � � ������� �� ������ ������ ��� ������������ ���������. �������� ��������� �� ������������. ��� �������� ���� ctlbuf ������ ���������� �� ����������� �������, databuf - �� ������� ������, flags �������� �������� 0 ��� RS_HIPRI.

��� ������� ���������� errno ��������� ��������� ��������:

[EFAULT]
�������� arg ��� ���������� �������� ctlbuf ��� databuf ��������� �� ������� ����������� �������� ��������� ������������.
I_SRDOPT
������������� ����� ������ � ������������ �� ��������� ��������� arg. ����������� �������� ��������� ��������:
RNORM
������� �����, �� ���������.
RMSGD
����� ��������� �� �������.
RMSGN
����� ��������� ��� ������.
������ ������ ������� � read(2).

��� ������� ���������� errno ��������� ��������� ��������:

[EINVAL]
�������� arg �����������.
I_GRDOPT
���������� ������� �������� ������ ������, ��������� ��� � ����� ����������, �� ������� ��������� �������� arg. ������ ������ ������� � read(2).

��� ������� ���������� errno ��������� ��������� ��������:

[EFAULT]
�������� arg ��������� �� ������� ����������� �������� ��������� ������������.
I_NREAD
��������� ���������� ���� ������ � ������ ��������� �� ������� �� ������ ������ � ����������� ����������� �������� ����������, �� ������� ��������� �������� arg. ��� ��������� ����� ���������� ��������, ������ ���������� ��������� � ������� �� ������ ������. ��������, ���� ���������� *arg ��������� �������� 0, � ioctl ��������� ��������, ������� 0, ������, ��������� ��������� � ������� ����� ������� �����.

��� ������� ���������� errno ��������� ��������� ��������:

[EFAULT]
�������� arg ��������� �� ������� ����������� �������� ��������� ������������.
I_FDINSERT
��������� ���������, ��������� �������������, ��������� � ���� ���������� � ������ ������ � �������� ��������� ����. ��������� �������� ����������� ������� � ����� ��������� ������� ������. ������������ �������� ������� ���������� ����������� ������� � ������� ������ � ������ �������, ��� ������� ����.

�������� arg ��������� �� ��������� ���� struct strfdinsert:

   struct strfdinsert {         
     struct strbuf ctlbuf;
     struct strbuf databuf;
     long          flags; 
     int           fildes;
     int           offset;
   };                           
���� ctlbuf.len [��. putmsg(2)] ������ ����� ��������, ������ ������� ��������� ���� ���������� ���� � ����������� ������� ���������. ���� fildes ������ ���������� ����� ������� ������. ���� offset, ������� ������ ���� ��������� �� ������� �����, ������ �������� �� ������ ����������� ������� ������ ������, ���� ������� I_FDINSERT ������� ��������� �� ��������� ������� ������ �������� ������, ������������� fildes. ���� databuf.len ������ ����� ��������, ������ ���������� ���� � ������� ������ ���������, ��� �������� 0, ���� ������� ������ �����������.

���� flags ������ ��� ����������� ���������. ���� ���� flags ����� �������� 0, ���������� �������������� ���������, � ���� ���� flags ����� �������� RS_HIPRI, ���������� ������������ ���������. ��� �������������� ���������, � ������ ���� ������� �� ������ ������ ���������, ������� I_FDINSERT ������������� � �������� ���������� �����. ��� ������������ ��������� ���������� � ���� ������ �� ����������. ���� ��� ������ ���������� ���� O_NDELAY, �� ��� �������������� ���������, � ������ ���� ������� �� ������ ������ ���������, ������� I_FDINSERT �� �����������, � ����������� �������� � ������������� ���������� errno �������� EAGAIN.

������� I_FDINSERT �������� ��������� ������ �������, � �����, ��� ����������� �� �������������� ��������� � ��������� ����� O_NDELAY, ��������������� � �������� ��������� ������ ��� ��������� � ������ (���� ��� ���� �� ���������� ���������� ��������� ��������).

��� ������� ���������� errno ��������� ���� �� ��������� ��������:

[EAGAIN]
������� �������������� ���������, � ������ ���������� ���� O_NDELAY � ������� ������ �� ������ ���������.
[EAGAIN]
�� ������� ��������� ������ ��� ������� ���������.
[EFAULT]
�������� arg ��� ���������� �������� ctlbuf ��� databuf ��������� �� ������� ����������� �������� ��������� ������������.
[EINVAL]
��� ���� fildes �� �������� ���������� ������������ ��������� �����, ��� �������� ���� offset ����������� �������� ctlptr.len, ��� ���� offset �� ��������� �� ������� �����, ��� �������� ���� flags �����������.
[ENXIO]
� ������ ��������� ������������ �����.
[ERANGE]
�������� ���� databuf.len ������� �� ������� ������������ ��� ������������� ������� ���������, ������� ������������ ����� ������� ������� ������, ��� ����������� ��������, �������� ��� ��������� �������, ��� �������� � ���� ctlbuf.len ����������� ��������, �������� ��� ��������� �������.
I_STR
��������� ���������� ����������� ��������� �� ������, ��������� �������������, � �������� ��������� ����.

����������� ������� ������������� ��� ������� ����������� ��������� ��� ������������ ������� ��� ��������� ������. ���������� ���������� ���� �� ������ �� ��� ���, ���� �� ���������� ������, ������� �� ���������� � ������ �������� ��������� �����. ������� I_STR ����������� �� ��� ���, ���� �� ������ ���������, �������������� ���������� ������������ �������� ��� ����������� ���, ���� ������� ������������ ������ �������. � ������ ��������� ������� ������� ����������� �������� � ������������� ���������� errno �������� ETIME.

������ ���� ������� I_STR ����� ���� �������� � ������, ��� ����������� ������� I_STR ����������� �� ��� ���, ���� ����� �� �������� ������� I_STR �� ������ �� ������. ����� �������� �� ��������� ����� 15 ��������. ������� ����� O_NDELAY [��. open(2)] � ���� ������� ������������.

�������� arg ������ ��������� �� ��������� ���� struct strioctl:

   struct strioctl {
     int  ic_cmd;    /* ������� */
     int  ic_timout; /* ����� �������� */
     int  ic_len;    /* ����� ������ */
     char *ic_dp;    /* ��������� �� ������ */
   };
� ���� ic_cmd �������� ���������� �������, ��������������� ������ ��� �������� ������. � ���� ic_timeout �������� ����� ��������: -1 - �����������, 0 - �� ���������, > 0 - ��������� ���������� ������. � ���� ic_len �������� ����� ������������ ������, � � ���� ic_dp - ��������� �� ������. ���� ic_len ������������ ��� ���� �����: �� ����� � ��� �������� ����� ������������ ������, � �� ������ � ���� ������������ ����� ������. �����, �� ������� ��������� ���� ic_dp, ������ ����� ����������� ������ ��� ������ ������ ������ �� ������ ������ ��� �������� ������.

����� ����������� ���������� �� ��������� strioctl � ������ ����������� ������������ ��������� � �������� ��� ��������� ����.

��� ������� ���������� errno ��������� ���� �� ��������� ��������:

[EAGAIN]
�� ������� ��������� ������ ��� ������� ���������.
[EFAULT]
�������� arg ��� ���� ic_dp ��� ic_len ��������� �� ������� ����������� �������� ��������� ������������.
[EINVAL]
�������� ic_len ������ 0 ��� ������ ���������, ��������� ��� ��������� �������, ��� �������� ic_timeout ������ -1.
[ENXIO]
� ������ ��������� ������������ �����.
[ETIME]
������ �������� ����� �� ��������� ������.
������� I_STR ����������� �������� ��� �������� ������, ���� ������� �������� ��������� �� ������ ��� ������������ �����. ����� ����, � ������������� ��� ������������� ������ �� ��������� ����� ����� ����������� ��� ������. � ���� ������ I_STR ����������� ��������, � �������� ���������� errno ��������������� ������ ����������� ���� ������.
I_SENDFD
����������� ������� ���������, ����������� ��������� ���������� �����, � ����� ������, ������������ �� ������ ����� ���������, � ������� ������ �����, ������������ ���������� fildes. ����, �� ��������� �������� ���� ����, �������� ���������� arg, ������� ������ ���� ����� ������ - ������������ ��������� �����.

������� I_SENDFD ��������� ��������� ��������� ����� � ������������ arg. ����������� ���������, � ������� ������������ ���� ���������, � ����� ������������� ������������ � ������������� ������ ��������, ������������ ������� I_SENDFD. ��������� ���������� ��������������� � ������� �� ������ [��. intro(2)] ������ ������ �� ������ ����� ���������, � ������� ������ ������ �����.

��� ������� ���������� errno ��������� ���� �� ��������� ��������:

[EAGAIN]
�� ������� ��������� ������ ��� ������� ���������.
[EAGAIN]
������� �� ������ ������ ��������� � �� ����� ������� ���������, ��������������� �� ������� I_SENDFD.
[EBADF]
�������� arg �� �������� ���������� ������������ ��������� �����.
[EINVAL]
�����, ������������ ���������� fildes, �� ������ � ��������.
[ENXIO]
� ������ ��������� ������������ �����.
I_RECVFD
�������� ���������� ����� �� ���������, ���������� �������� I_SENDFD � ������� ����� ���������. �������� arg ��������� �� ��������� ���� struct strrecvfd:
   struct strrecvfd {
     int            fd;
     unsigned short uid;
     unsigned short gid;
     char           fill [8];
   };
� ���� fd ������������ ���������� �����. � ���� uid � gid - ������������� ������������ � ������������� ������ ��������, ������������ ������� I_SENDFD.

���� ����������� ���� O_NDELAY [��. open(2)], ������� I_RECVFD ����������� �� ��� ���, ���� �� ������ �����-������ ���������. ���� ���� O_NDELAY ������������, � � ������ ��� ������� ���������, ������� I_RECVFD ����������� �������� � ������������� ���������� errno �������� EAGAIN.

���� ���������� ��������� ������������� ������� �������� I_SENDFD, ���������� ����� ���������� �����, ��������� �������� ������� � ���������. ����� ���������� ���������� � ���� fd ��������� ���� strrecvfd, �� ������� ��������� �������� arg.

��� ������� ���������� errno ��������� ���� �� ��������� ��������:

[EAGAIN]
� ������ ���������� ���� O_NDELAY � ������� ������ �� ������ �����.
[EBADMSG]
���������� ��������� ������� �� �������� I_SENDFD.
[EFAULT]
�������� arg ��������� �� ������� ����������� �������� ��������� ������������.
[EMFILE]
��� ������� NOFILES ������������ �������� ������.
[ENXIO]
� ������ ��������� ������������ �����.
��������� ��� ������� ������������ ��� ������ � ������������������� �������������� ���������������:
I_LINK
��������� ��� ������, ��� fildes - ��� ���������� ����� ��� ������ � ������������������ ���������, � arg - ���������� ����� ��� ������ � ������ ���������. �����, �������� ���������� arg, �������������� � ������������������� ��������. ������� I_LINK �������� � ������� ������������������ ��������� � ����� ���������, ���������� � ���������� �������� �������������. ��������� ����� ��� ������ ���������� ������������� �������������� (������� ������������ ������������ ��� ������������, ��. I_UNLINK). ��� ������� ������������ -1.

��� ������� ���������� errno ��������� ���� �� ��������� ��������:

[ENXIO]
� ������ ��������� ������������ �����.
[ETIME]
������ �������� ����� �� ��������� ������.
[EAGAIN]
�� ������� ��������� ������ ��� ���������� �������.
[EBADF]
�������� arg �� �������� ���������� ������������ ��������� �����.
[EINVAL]
����� fildes �� ������������ �������������������.
[EINVAL]
�������� arg ����������� ��� ����� arg ��� ������������������.
[EINVAL]
��������� "����" � ������������������ ������������, ��������, ������ ����� ����� � ���������� ������ ������������.
������� I_LINK ����������� �������� ��� �������� ������, ���� ������� ������ fildes �������� ��������� �� ������ ��� ������������ �����. ����� ����, � ������������� ��� ������������� ������ �� ��������� ����� ����� ����������� ��� ������. � ���� ������ ������� I_LINK ����������� ��������, � �������� ���������� errno ��������������� ������ ����������� ���� ������.
I_UNLINK
��� ������� ��� ������, �������� ����������� fildes � arg. �������� fildes - ��� ���������� ����� ��� ������ � ������������������ ���������, � arg - ������������� ��������������, ������� ��� ��������� �������� I_LINK ��� ���������� �������. ���� arg ����� -1, �� ������ fildes ������������� ��� �������������� ������. ��� �� ��� � ������� I_LINK, ������� I_UNLINK �������� � ������� ������������������ ��������� � ����� ���������, ���������� � ���������� �������� ������������.

��� ������� ���������� errno ��������� ���� �� ��������� ��������:

[ENXIO]
� ������ ��������� ������������ �����.
[ETIME]
������ �������� ����� �� ��������� ������.
[EAGAIN]
�� ������� ��������� ������ ��� ������� ������.
[EINVAL]
�������� arg �����������.
������� I_UNLINK ����������� �������� ��� �������� ������, ���� ������� ������ fildes �������� ��������� �� ������ ��� ������������ �����. ����� ����, � ������������� ��� ������������� ������ �� ��������� ����� ����� ����������� ��� ������. � ���� ������ ������� I_UNLINK ����������� ��������, � �������� ���������� errno ��������������� ������ ����������� ���� ������.

��. �����
intro(2), close(2), fcntl(2), getmsg(2), ioctl(2), open(2), poll(2), putmsg(2), read(2), signal(2), sigset(2), write(2) � ����������� ������������.

�����������
���� �� ��������� ���������, �� � ������ ������ ���������, ������������ ��������� ������� ioctl, ����� 0. � ������ ������� ������������ -1, � ���������� errno ������������� ��� ������.
Comments: [email protected]
Designed by Andrey Novikov
Copyright © CIT