File: 600-notes.html

package info (click to toggle)
libexplain 1.4.D001-16
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 42,228 kB
  • sloc: ansic: 156,043; makefile: 47,892; sh: 16,304; yacc: 1,898; awk: 245
file content (107 lines) | stat: -rw-r--r-- 3,098 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<!--
  libexplain - Explain errno values returned by libc functions
  Copyright (C) 2009, 2010 Peter Miller
  Written by Peter Miller <pmiller@opensource.org.au>

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 3 of the License, or (at
  your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
.hy 0
.ad l
<!DOCTYPE HTML PUBLIC
    "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd"
    >
.br
<html>
<head>
<title>
No Medium Found, 6.0, Notes
</title>
</head>
<body>

<table width="100%" >
<tr>
    <td align="left" >
        <a href="500-notes.html" >Prev</a>,
        <a href="000-notes.html" >Top</a>
    </td><td align="right" >
        <a href="600-slide.html" >Slide</a>,
        <a href="700-notes.html" >Next</a>
    </td>
</tr>
</table>

<h1>
6. Adventures in <i>ioctl</i>(2) Support
</h1>

<ul>
<li> See <i>ioctl_list</i>(2)
</ul>

<h2> <a name="6.1">6.1</a> Decoding Request Numbers </h2>
<ul>
<li> first impression: large but limited set
<li> switch: they don't play well together<br/>
     one ioctl handler per source file
<li> reality: private request numbers
<li> ambiguity: private <i>and</i> historical (look at file descriptor)
<li> internal table of pointers (not a problem yet);
     <a href="600-slide.html" >slide</a>
<li> ...each has optional "method" to disambiguate
<li> URL.. follow along the source code
</ul>

<h2> <a name="6.2">6.2</a> Representation </h2>
<ul>
<li> "fildes" is handled the same way as the other system calls
<li> "request" is handled on previous slide
<li> accurate representation of 3rd argument;
     <a href="620-slide.html" >slide</a>
<li> ...each ioctl request has "method" to print data
<li> ...output-only requests just print the pointer
</ul>

<h2> <a name="6.3">6.3</a> Explanations </h2>
<ul>
<li> each ioctl request has "method" to print explanation;
     <a href="630-slide.html" >slide</a>
<li> set set of <i>errno</i>(3) value usually not documented
<li> this is where you read kernel source
</ul>

<h2> <a name="6.4">6.4</a> EINVAL <i>vs</i> ENOTTY </h2>
<ul>
<li> like system calls, this is messy;
     <a href="640-slide.html" >slide</a>
<li> kernel source comments indicate this may be being dealt with
<li> also: ENOSYS, ENOTSUP EOPNOTSUP, and (not Linux) ENOIOCTL
</ul>

<h2> <a name="6.5">6.5</a> intptr_t </h2>
<ul>
<li> shoe-horn
<li> prototype;
     <a href="650-slide.html" >slide</a>
<li> ...bye bye type safety
<li> <i>tcflush</i>(3) and friends
<li> [e]glibc internally: two ways
<li> sys_ioctl
<li> cognitive dissonance = bugs
<li> intptr_t
</ul>

</body>
</html>