]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man2/ioperm.2
Start of man-pages-5.03: renaming .Announce and .lsm files
[thirdparty/man-pages.git] / man2 / ioperm.2
CommitLineData
fea681da
MK
1.\" Copyright (c) 1993 Michael Haardt
2.\" (michael@moria.de)
3.\" Fri Apr 2 11:32:09 MET DST 1993
c13182ef 4.\"
1dd72f9c 5.\" %%%LICENSE_START(GPLv2+_DOC_FULL)
fea681da
MK
6.\" This is free documentation; you can redistribute it and/or
7.\" modify it under the terms of the GNU General Public License as
8.\" published by the Free Software Foundation; either version 2 of
9.\" the License, or (at your option) any later version.
10.\"
11.\" The GNU General Public License's references to "object code"
12.\" and "executables" are to be interpreted as the output of any
13.\" document formatting or typesetting system, including
14.\" intermediate and printed output.
15.\"
16.\" This manual is distributed in the hope that it will be useful,
17.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
18.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19.\" GNU General Public License for more details.
20.\"
21.\" You should have received a copy of the GNU General Public
c715f741
MK
22.\" License along with this manual; if not, see
23.\" <http://www.gnu.org/licenses/>.
6a8d8745 24.\" %%%LICENSE_END
fea681da
MK
25.\"
26.\" Modified Sat Jul 24 15:12:05 1993 by Rik Faith <faith@cs.unc.edu>
c13182ef 27.\" Modified Tue Aug 1 16:27 1995 by Jochen Karrer
fea681da
MK
28.\" <cip307@cip.physik.uni-wuerzburg.de>
29.\" Modified Tue Oct 22 08:11:14 EDT 1996 by Eric S. Raymond <esr@thyrsus.com>
30.\" Modified Mon Feb 15 17:28:41 CET 1999 by Andries E. Brouwer <aeb@cwi.nl>
c11b1abf 31.\" Modified, 27 May 2004, Michael Kerrisk <mtk.manpages@gmail.com>
fea681da
MK
32.\" Added notes on capability requirements
33.\"
4b8c67d9 34.TH IOPERM 2 2017-09-15 "Linux" "Linux Programmer's Manual"
fea681da
MK
35.SH NAME
36ioperm \- set port input/output permissions
37.SH SYNOPSIS
fea681da
MK
38.B #include <sys/io.h>
39/* for glibc */
68e4db0a 40.PP
fea681da
MK
41.BI "int ioperm(unsigned long " from ", unsigned long " num ", int " turn_on );
42.SH DESCRIPTION
60a90ecd 43.BR ioperm ()
9a8235e2 44sets the port access permission bits for the calling thread for
c3ec5c77
MK
45.I num
46bits starting from port address
47.IR from .
50b2aa27 48If
c3ec5c77
MK
49.I turn_on
50is nonzero, then permission for the specified bits is enabled;
51otherwise it is disabled.
52If
53.I turn_on
54is nonzero, the calling thread must be privileged
5bb80360 55.RB ( CAP_SYS_RAWIO ).
efeece04 56.PP
5b9f466d
MK
57Before Linux 2.6.8,
58only the first 0x3ff I/O ports could be specified in this manner.
f3634346 59For more ports, the
0bfa087b 60.BR iopl (2)
4079fe37
MK
61system call had to be used (with a
62.I level
63argument of 3).
5b9f466d 64Since Linux 2.6.8, 65,536 I/O ports can be specified.
efeece04 65.PP
b6e7016e 66Permissions are inherited by the child created by
daabaf99 67.BR fork (2)
b6e7016e 68(but see NOTES).
51a138ce
MK
69Permissions are preserved across
70.BR execve (2);
60b9e97c 71this is useful for giving port access permissions to unprivileged
51a138ce 72programs.
efeece04 73.PP
fea681da
MK
74This call is mostly for the i386 architecture.
75On many other architectures it does not exist or will always
76return an error.
47297adb 77.SH RETURN VALUE
c13182ef
MK
78On success, zero is returned.
79On error, \-1 is returned, and
fea681da
MK
80.I errno
81is set appropriately.
82.SH ERRORS
83.TP
84.B EINVAL
85Invalid values for
86.I from
87or
88.IR num .
89.TP
90.B EIO
51a138ce 91(on PowerPC) This call is not supported.
fea681da 92.TP
f3634346
MK
93.B ENOMEM
94.\" Could not allocate I/O bitmap.
95Out of memory.
96.TP
fea681da 97.B EPERM
9a8235e2 98The calling thread has insufficient privilege.
47297adb 99.SH CONFORMING TO
60a90ecd 100.BR ioperm ()
8382f16d 101is Linux-specific and should not be used in programs
fea681da
MK
102intended to be portable.
103.SH NOTES
5acc6d65
MK
104The
105.I /proc/ioports
106file shows the I/O ports that are currently allocated on the system.
efeece04 107.PP
b6e7016e
MK
108Before Linux 2.4,
109permissions were not inherited by a child created by
110.BR fork (2).
efeece04 111.PP
abaa5fb0
MK
112Glibc has an
113.BR ioperm ()
114prototype both in
fea681da
MK
115.I <sys/io.h>
116and in
117.IR <sys/perm.h> .
118Avoid the latter, it is available on i386 only.
47297adb 119.SH SEE ALSO
fea681da 120.BR iopl (2),
22b87e13 121.BR outb (2),
fea681da 122.BR capabilities (7)