Various pages: Remove unused <sys/types.h>

Message ID 20210314160134.127878-1-alx.manpages@gmail.com
State Not applicable
Headers
Series Various pages: Remove unused <sys/types.h> |

Commit Message

Alejandro Colomar March 14, 2021, 4:01 p.m. UTC
  The manual pages are already inconsistent in which headers need
to be included.  Right now, not all of the types used by a
function have their required header included in the SYNOPSIS.

If we were to add the headers required by all of the types used by
functions, the SYNOPSIS would grow too much.  Not only it would
grow too much, but the information there would be less precise.

Having system_data_types(7) document each type with all the
information about required includes is much more precise, and the
info is centralized so that it's much easier to maintain.

So let's document only the include required for the function
prototype, and also the ones required for the macros needed to
call the function.

<sys/types.h> only defines types, not functions or constants, so
it doesn't belong to man[23] (function) pages at all.

I ignore if some old systems had headers that required you to
include <sys/types.h> *before* them (incomplete headers), but if
so, those implementations would be broken, and those headers
should probably provide some kind of warning.  I hope this is not
the case.

Signed-off-by: Alejandro Colomar <alx.manpages@gmail.com>
---
 man2/accept.2            |  7 -------
 man2/bind.2              |  7 -------
 man2/connect.2           |  7 -------
 man2/fork.2              |  1 -
 man2/get_robust_list.2   |  1 -
 man2/getgid.2            |  1 -
 man2/getgroups.2         |  1 -
 man2/getpid.2            |  1 -
 man2/getsid.2            |  1 -
 man2/getsockopt.2        |  7 -------
 man2/gettid.2            |  1 -
 man2/getuid.2            |  1 -
 man2/getxattr.2          |  1 -
 man2/keyctl.2            |  1 -
 man2/kill.2              |  1 -
 man2/listen.2            |  7 -------
 man2/listxattr.2         |  1 -
 man2/llseek.2            |  1 -
 man2/lseek.2             |  1 -
 man2/mkdir.2             |  1 -
 man2/mknod.2             |  1 -
 man2/modify_ldt.2        |  2 --
 man2/mq_getsetattr.2     |  1 -
 man2/msgctl.2            | 11 ++++-------
 man2/msgget.2            | 11 ++++-------
 man2/msgop.2             | 11 ++++-------
 man2/open.2              |  1 -
 man2/open_by_handle_at.2 |  1 -
 man2/openat2.2           |  1 -
 man2/pidfd_open.2        |  2 --
 man2/recv.2              |  1 -
 man2/removexattr.2       |  1 -
 man2/request_key.2       |  1 -
 man2/semctl.2            |  9 +++------
 man2/semget.2            | 11 ++++-------
 man2/semop.2             | 11 ++++-------
 man2/send.2              |  1 -
 man2/seteuid.2           |  1 -
 man2/setgid.2            |  1 -
 man2/setpgid.2           |  1 -
 man2/setreuid.2          |  1 -
 man2/setsid.2            |  1 -
 man2/setuid.2            |  1 -
 man2/setxattr.2          |  1 -
 man2/shmctl.2            | 10 ++++------
 man2/socket.2            |  7 -------
 man2/socketpair.2        |  7 -------
 man2/statx.2             |  1 -
 man2/vfork.2             |  1 -
 49 files changed, 27 insertions(+), 133 deletions(-)
  

Comments

Zack Weinberg March 14, 2021, 9:40 p.m. UTC | #1
On Sun, Mar 14, 2021 at 12:04 PM Alejandro Colomar via Libc-alpha
<libc-alpha@sourceware.org> wrote:
>
> The manual pages are already inconsistent in which headers need
> to be included.  Right now, not all of the types used by a
> function have their required header included in the SYNOPSIS.
>
> If we were to add the headers required by all of the types used by
> functions, the SYNOPSIS would grow too much.  Not only it would
> grow too much, but the information there would be less precise.
>
> Having system_data_types(7) document each type with all the
> information about required includes is much more precise, and the
> info is centralized so that it's much easier to maintain.
>
> So let's document only the include required for the function
> prototype, and also the ones required for the macros needed to
> call the function.

I endorse this change.  For glibc, if the header file containing the
function prototype doesn't also provide everything you need to call
the function, it's a bug (except for a few cases where the relevant
standards prevent us from doing this, e.g. a function that calls
vprintf will need the macros in <stdarg.h>, but the C standard
specifically forbids <stdio.h> to include <stdarg.h>).

> <sys/types.h> only defines types, not functions or constants, so
> it doesn't belong to man[23] (function) pages at all.
> I ignore if some old systems had headers that required you to
> include <sys/types.h> *before* them (incomplete headers),

Such systems did exist in the past, but they are too old to worry
about nowadays.  I don't think it's possible for them to be compliant
with POSIX.1-1995, and the examples I know of personally (SunOS 4, for
instance) were not even fully compliant with C89.

zw
  
develop--- via Libc-alpha March 14, 2021, 10 p.m. UTC | #2
Hello Zack,

On Sun, 14 Mar 2021 at 22:40, Zack Weinberg <zackw@panix.com> wrote:
>
> On Sun, Mar 14, 2021 at 12:04 PM Alejandro Colomar via Libc-alpha
> <libc-alpha@sourceware.org> wrote:
> >
> > The manual pages are already inconsistent in which headers need
> > to be included.  Right now, not all of the types used by a
> > function have their required header included in the SYNOPSIS.
> >
> > If we were to add the headers required by all of the types used by
> > functions, the SYNOPSIS would grow too much.  Not only it would
> > grow too much, but the information there would be less precise.
> >
> > Having system_data_types(7) document each type with all the
> > information about required includes is much more precise, and the
> > info is centralized so that it's much easier to maintain.
> >
> > So let's document only the include required for the function
> > prototype, and also the ones required for the macros needed to
> > call the function.
>
> I endorse this change.

I agree. Do you want to add an "Acked-by:"?

Thanks,

Michael

> For glibc, if the header file containing the
> function prototype doesn't also provide everything you need to call
> the function, it's a bug (except for a few cases where the relevant
> standards prevent us from doing this, e.g. a function that calls
> vprintf will need the macros in <stdarg.h>, but the C standard
> specifically forbids <stdio.h> to include <stdarg.h>).
>
> > <sys/types.h> only defines types, not functions or constants, so
> > it doesn't belong to man[23] (function) pages at all.
> > I ignore if some old systems had headers that required you to
> > include <sys/types.h> *before* them (incomplete headers),
>
> Such systems did exist in the past, but they are too old to worry
> about nowadays.  I don't think it's possible for them to be compliant
> with POSIX.1-1995, and the examples I know of personally (SunOS 4, for
> instance) were not even fully compliant with C89.
  
Michael Kerrisk \(man-pages\) March 15, 2021, 7:44 a.m. UTC | #3
Hi Alex,

On 3/14/21 5:01 PM, Alejandro Colomar wrote:
> The manual pages are already inconsistent in which headers need
> to be included.  Right now, not all of the types used by a
> function have their required header included in the SYNOPSIS.
> 
> If we were to add the headers required by all of the types used by
> functions, the SYNOPSIS would grow too much.  Not only it would
> grow too much, but the information there would be less precise.
> 
> Having system_data_types(7) document each type with all the
> information about required includes is much more precise, and the
> info is centralized so that it's much easier to maintain.
> 
> So let's document only the include required for the function
> prototype, and also the ones required for the macros needed to
> call the function.
> 
> <sys/types.h> only defines types, not functions or constants, so
> it doesn't belong to man[23] (function) pages at all.
> 
> I ignore if some old systems had headers that required you to
> include <sys/types.h> *before* them (incomplete headers), but if
> so, those implementations would be broken, and those headers
> should probably provide some kind of warning.  I hope this is not
> the case.
> 
> Signed-off-by: Alejandro Colomar <alx.manpages@gmail.com>

If I recall correctly, I had a conversation about this topic
with the previous maintainer, who pointed out that the need 
to include <sys/types.h> was (then) still quite current on
various implementations. But it is (by now) 20 years since
POSIX.1-2001/SUSv3 dropped the requirement to include 
<sys/types.h>  when using various APIs, so this patch seems
well past due, and I have applied it (with an Acked-by from
Zack).

Cheers,

Michael


> ---
>  man2/accept.2            |  7 -------
>  man2/bind.2              |  7 -------
>  man2/connect.2           |  7 -------
>  man2/fork.2              |  1 -
>  man2/get_robust_list.2   |  1 -
>  man2/getgid.2            |  1 -
>  man2/getgroups.2         |  1 -
>  man2/getpid.2            |  1 -
>  man2/getsid.2            |  1 -
>  man2/getsockopt.2        |  7 -------
>  man2/gettid.2            |  1 -
>  man2/getuid.2            |  1 -
>  man2/getxattr.2          |  1 -
>  man2/keyctl.2            |  1 -
>  man2/kill.2              |  1 -
>  man2/listen.2            |  7 -------
>  man2/listxattr.2         |  1 -
>  man2/llseek.2            |  1 -
>  man2/lseek.2             |  1 -
>  man2/mkdir.2             |  1 -
>  man2/mknod.2             |  1 -
>  man2/modify_ldt.2        |  2 --
>  man2/mq_getsetattr.2     |  1 -
>  man2/msgctl.2            | 11 ++++-------
>  man2/msgget.2            | 11 ++++-------
>  man2/msgop.2             | 11 ++++-------
>  man2/open.2              |  1 -
>  man2/open_by_handle_at.2 |  1 -
>  man2/openat2.2           |  1 -
>  man2/pidfd_open.2        |  2 --
>  man2/recv.2              |  1 -
>  man2/removexattr.2       |  1 -
>  man2/request_key.2       |  1 -
>  man2/semctl.2            |  9 +++------
>  man2/semget.2            | 11 ++++-------
>  man2/semop.2             | 11 ++++-------
>  man2/send.2              |  1 -
>  man2/seteuid.2           |  1 -
>  man2/setgid.2            |  1 -
>  man2/setpgid.2           |  1 -
>  man2/setreuid.2          |  1 -
>  man2/setsid.2            |  1 -
>  man2/setuid.2            |  1 -
>  man2/setxattr.2          |  1 -
>  man2/shmctl.2            | 10 ++++------
>  man2/socket.2            |  7 -------
>  man2/socketpair.2        |  7 -------
>  man2/statx.2             |  1 -
>  man2/vfork.2             |  1 -
>  49 files changed, 27 insertions(+), 133 deletions(-)
> 
> diff --git a/man2/accept.2 b/man2/accept.2
> index 0923ea97a..a5d642cc3 100644
> --- a/man2/accept.2
> +++ b/man2/accept.2
> @@ -43,7 +43,6 @@
>  accept, accept4 \- accept a connection on a socket
>  .SH SYNOPSIS
>  .nf
> -.BR "#include <sys/types.h>" "          /* See NOTES */"
>  .B #include <sys/socket.h>
>  .PP
>  .BI "int accept(int " sockfd ", struct sockaddr *restrict " addr ,
> @@ -319,12 +318,6 @@ of file status flags and always explicitly set all required flags on
>  the socket returned from
>  .BR accept ().
>  .SH NOTES
> -POSIX.1-2001 does not require the inclusion of
> -.IR <sys/types.h> ,
> -and this header file is not required on Linux.
> -However, some historical (BSD) implementations required this header
> -file, and portable applications are probably wise to include it.
> -.PP
>  There may not always be a connection waiting after a
>  .B SIGIO
>  is delivered or
> diff --git a/man2/bind.2 b/man2/bind.2
> index 548391f1d..e4765dde0 100644
> --- a/man2/bind.2
> +++ b/man2/bind.2
> @@ -71,7 +71,6 @@
>  bind \- bind a name to a socket
>  .SH SYNOPSIS
>  .nf
> -.BR "#include <sys/types.h>" "          /* See NOTES */"
>  .B #include <sys/socket.h>
>  .PP
>  .BI "int bind(int " sockfd ", const struct sockaddr *" addr ,
> @@ -243,12 +242,6 @@ first appeared in 4.2BSD).
>  .\" .B EISDIR
>  .\" UNIX-domain error conditions.
>  .SH NOTES
> -POSIX.1 does not require the inclusion of
> -.IR <sys/types.h> ,
> -and this header file is not required on Linux.
> -However, some historical (BSD) implementations required this header
> -file, and portable applications are probably wise to include it.
> -.PP
>  For background on the
>  .I socklen_t
>  type, see
> diff --git a/man2/connect.2 b/man2/connect.2
> index 9572676ef..013a46994 100644
> --- a/man2/connect.2
> +++ b/man2/connect.2
> @@ -69,7 +69,6 @@
>  connect \- initiate a connection on a socket
>  .SH SYNOPSIS
>  .nf
> -.BR "#include <sys/types.h>" "          /* See NOTES */"
>  .B #include <sys/socket.h>
>  .PP
>  .BI "int connect(int " sockfd ", const struct sockaddr *" addr ,
> @@ -276,12 +275,6 @@ first appeared in 4.2BSD).
>  .\" It also
>  .\" documents many additional error conditions not described here.
>  .SH NOTES
> -POSIX.1 does not require the inclusion of
> -.IR <sys/types.h> ,
> -and this header file is not required on Linux.
> -However, some historical (BSD) implementations required this header
> -file, and portable applications are probably wise to include it.
> -.PP
>  For background on the
>  .I socklen_t
>  type, see
> diff --git a/man2/fork.2 b/man2/fork.2
> index 894a628cc..344b9f6eb 100644
> --- a/man2/fork.2
> +++ b/man2/fork.2
> @@ -41,7 +41,6 @@
>  fork \- create a child process
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
>  .B #include <unistd.h>
>  .PP
>  .B pid_t fork(void);
> diff --git a/man2/get_robust_list.2 b/man2/get_robust_list.2
> index b1ae42dbd..ac73bfab0 100644
> --- a/man2/get_robust_list.2
> +++ b/man2/get_robust_list.2
> @@ -33,7 +33,6 @@ get_robust_list, set_robust_list \- get/set list of robust futexes
>  .SH SYNOPSIS
>  .nf
>  .B #include <linux/futex.h>
> -.B #include <sys/types.h>
>  .B #include <syscall.h>
>  .PP
>  .BI "long get_robust_list(int " pid ", struct robust_list_head **" head_ptr ,
> diff --git a/man2/getgid.2 b/man2/getgid.2
> index e0c802e36..4c2ec6163 100644
> --- a/man2/getgid.2
> +++ b/man2/getgid.2
> @@ -28,7 +28,6 @@ getgid, getegid \- get group identity
>  .SH SYNOPSIS
>  .nf
>  .B #include <unistd.h>
> -.B #include <sys/types.h>
>  .PP
>  .B gid_t getgid(void);
>  .B gid_t getegid(void);
> diff --git a/man2/getgroups.2 b/man2/getgroups.2
> index ffe01fbb1..a90894b8a 100644
> --- a/man2/getgroups.2
> +++ b/man2/getgroups.2
> @@ -34,7 +34,6 @@
>  getgroups, setgroups \- get/set list of supplementary group IDs
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
>  .B #include <unistd.h>
>  .PP
>  .BI "int getgroups(int " size ", gid_t " list []);
> diff --git a/man2/getpid.2 b/man2/getpid.2
> index f2bf232ca..b2574c4c3 100644
> --- a/man2/getpid.2
> +++ b/man2/getpid.2
> @@ -27,7 +27,6 @@
>  getpid, getppid \- get process identification
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
>  .B #include <unistd.h>
>  .PP
>  .B pid_t getpid(void);
> diff --git a/man2/getsid.2 b/man2/getsid.2
> index 11d096a1a..805ffe0bd 100644
> --- a/man2/getsid.2
> +++ b/man2/getsid.2
> @@ -29,7 +29,6 @@
>  getsid \- get session ID
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
>  .B #include <unistd.h>
>  .PP
>  .BI "pid_t getsid(pid_t" " pid" );
> diff --git a/man2/getsockopt.2 b/man2/getsockopt.2
> index 9b2c6cc3d..8011a4b5a 100644
> --- a/man2/getsockopt.2
> +++ b/man2/getsockopt.2
> @@ -46,7 +46,6 @@
>  getsockopt, setsockopt \- get and set options on sockets
>  .SH SYNOPSIS
>  .nf
> -.BR "#include <sys/types.h>" "          /* See NOTES */"
>  .B #include <sys/socket.h>
>  .PP
>  .BI "int getsockopt(int " sockfd ", int " level ", int " optname ,
> @@ -179,12 +178,6 @@ SVr4, 4.4BSD (these system calls first appeared in 4.2BSD).
>  .\" .BR SO_SNDLOWAT ", " SO_RCVLOWAT ", " SO_SNDTIMEO ", " SO_RCVTIMEO
>  .\" options
>  .SH NOTES
> -POSIX.1 does not require the inclusion of
> -.IR <sys/types.h> ,
> -and this header file is not required on Linux.
> -However, some historical (BSD) implementations required this header
> -file, and portable applications are probably wise to include it.
> -.PP
>  For background on the
>  .I socklen_t
>  type, see
> diff --git a/man2/gettid.2 b/man2/gettid.2
> index 60780e2b7..13313caa4 100644
> --- a/man2/gettid.2
> +++ b/man2/gettid.2
> @@ -30,7 +30,6 @@ gettid \- get thread identification
>  .nf
>  .B #define _GNU_SOURCE
>  .B #include <unistd.h>
> -.B #include <sys/types.h>
>  .PP
>  .B pid_t gettid(void);
>  .fi
> diff --git a/man2/getuid.2 b/man2/getuid.2
> index 6c2768643..e374d21ab 100644
> --- a/man2/getuid.2
> +++ b/man2/getuid.2
> @@ -29,7 +29,6 @@ getuid, geteuid \- get user identity
>  .SH SYNOPSIS
>  .nf
>  .B #include <unistd.h>
> -.B #include <sys/types.h>
>  .PP
>  .B uid_t getuid(void);
>  .B uid_t geteuid(void);
> diff --git a/man2/getxattr.2 b/man2/getxattr.2
> index d7a92f901..d63e45bd2 100644
> --- a/man2/getxattr.2
> +++ b/man2/getxattr.2
> @@ -28,7 +28,6 @@ getxattr, lgetxattr, fgetxattr \- retrieve an extended attribute value
>  .SH SYNOPSIS
>  .fam C
>  .nf
> -.B #include <sys/types.h>
>  .B #include <sys/xattr.h>
>  .PP
>  .BI "ssize_t getxattr(const char *" path ", const char *" name ,
> diff --git a/man2/keyctl.2 b/man2/keyctl.2
> index 99cb65e19..a6daafe7a 100644
> --- a/man2/keyctl.2
> +++ b/man2/keyctl.2
> @@ -30,7 +30,6 @@
>  keyctl \- manipulate the kernel's key management facility
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
>  .B #include <keyutils.h>
>  .PP
>  .BI "long keyctl(int " operation ", ...);"
> diff --git a/man2/kill.2 b/man2/kill.2
> index b6fa289ab..9b27726d7 100644
> --- a/man2/kill.2
> +++ b/man2/kill.2
> @@ -46,7 +46,6 @@
>  kill \- send signal to a process
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
>  .B #include <signal.h>
>  .PP
>  .BI "int kill(pid_t " pid ", int " sig );
> diff --git a/man2/listen.2 b/man2/listen.2
> index 7c944ff4c..5e12bc756 100644
> --- a/man2/listen.2
> +++ b/man2/listen.2
> @@ -47,7 +47,6 @@
>  listen \- listen for connections on a socket
>  .SH SYNOPSIS
>  .nf
> -.BR "#include <sys/types.h>" "          /* See NOTES */"
>  .B #include <sys/socket.h>
>  .PP
>  .BI "int listen(int " sockfd ", int " backlog );
> @@ -140,12 +139,6 @@ Connections are accepted with
>  .BR accept (2).
>  .RE
>  .PP
> -POSIX.1 does not require the inclusion of
> -.IR <sys/types.h> ,
> -and this header file is not required on Linux.
> -However, some historical (BSD) implementations required this header
> -file, and portable applications are probably wise to include it.
> -.PP
>  The behavior of the
>  .I backlog
>  argument on TCP sockets changed with Linux 2.2.
> diff --git a/man2/listxattr.2 b/man2/listxattr.2
> index f073c5409..03595a9e6 100644
> --- a/man2/listxattr.2
> +++ b/man2/listxattr.2
> @@ -29,7 +29,6 @@ listxattr, llistxattr, flistxattr \- list extended attribute names
>  .SH SYNOPSIS
>  .fam C
>  .nf
> -.B #include <sys/types.h>
>  .B #include <sys/xattr.h>
>  .PP
>  .BI "ssize_t listxattr(const char *" path ", char *" list \
> diff --git a/man2/llseek.2 b/man2/llseek.2
> index a46ce370e..81bb4e19f 100644
> --- a/man2/llseek.2
> +++ b/man2/llseek.2
> @@ -31,7 +31,6 @@
>  _llseek \- reposition read/write file offset
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
>  .B #include <unistd.h>
>  .PP
>  .BI "int _llseek(unsigned int " fd ", unsigned long " offset_high ,
> diff --git a/man2/lseek.2 b/man2/lseek.2
> index ad5526b66..042479833 100644
> --- a/man2/lseek.2
> +++ b/man2/lseek.2
> @@ -48,7 +48,6 @@
>  lseek \- reposition read/write file offset
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
>  .B #include <unistd.h>
>  .PP
>  .BI "off_t lseek(int " fd ", off_t " offset ", int " whence );
> diff --git a/man2/mkdir.2 b/man2/mkdir.2
> index 6934e331a..640a4783d 100644
> --- a/man2/mkdir.2
> +++ b/man2/mkdir.2
> @@ -14,7 +14,6 @@ mkdir, mkdirat \- create a directory
>  .SH SYNOPSIS
>  .nf
>  .B #include <sys/stat.h>
> -.B #include <sys/types.h>
>  .\" .B #include <unistd.h>
>  .PP
>  .BI "int mkdir(const char *" pathname ", mode_t " mode );
> diff --git a/man2/mknod.2 b/man2/mknod.2
> index fad459d8c..9ecf6611b 100644
> --- a/man2/mknod.2
> +++ b/man2/mknod.2
> @@ -17,7 +17,6 @@
>  mknod, mknodat \- create a special or ordinary file
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
>  .B #include <sys/stat.h>
>  .B #include <fcntl.h>
>  .B #include <unistd.h>
> diff --git a/man2/modify_ldt.2 b/man2/modify_ldt.2
> index 7dc12be8e..c40dae62b 100644
> --- a/man2/modify_ldt.2
> +++ b/man2/modify_ldt.2
> @@ -27,8 +27,6 @@
>  modify_ldt \- get or set a per-process LDT entry
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
> -.PP
>  .BI "int modify_ldt(int " func ", void *" ptr ", unsigned long " bytecount );
>  .fi
>  .PP
> diff --git a/man2/mq_getsetattr.2 b/man2/mq_getsetattr.2
> index 409dfe11c..5036428d6 100644
> --- a/man2/mq_getsetattr.2
> +++ b/man2/mq_getsetattr.2
> @@ -27,7 +27,6 @@
>  mq_getsetattr \- get/set message queue attributes
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
>  .B #include <mqueue.h>
>  .PP
>  .BI "int mq_getsetattr(mqd_t " mqdes ", const struct mq_attr *" newattr ,
> diff --git a/man2/msgctl.2 b/man2/msgctl.2
> index 1e27871ad..58e8cb29e 100644
> --- a/man2/msgctl.2
> +++ b/man2/msgctl.2
> @@ -40,7 +40,6 @@
>  msgctl \- System V message control operations
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
>  .B #include <sys/ipc.h>
>  .B #include <sys/msg.h>
>  .PP
> @@ -407,17 +406,15 @@ POSIX.1-2001, POSIX.1-2008, SVr4.
>  .\" SVID does not document the EIDRM error condition.
>  .SH NOTES
>  The inclusion of
> -.I <sys/types.h>
> -and
>  .I <sys/ipc.h>
>  isn't required on Linux or by any version of POSIX.
>  However,
> -some old implementations required the inclusion of these header files,
> -and the SVID also documented their inclusion.
> +some old implementations required the inclusion of this header file,
> +and the SVID also documented its inclusion.
>  Applications intended to be portable to such old systems may need
> -to include these header files.
> +to include this header file.
>  .\" Like Linux, the FreeBSD man pages still document
> -.\" the inclusion of these header files.
> +.\" the inclusion of this header file.
>  .PP
>  The
>  .BR IPC_INFO ,
> diff --git a/man2/msgget.2 b/man2/msgget.2
> index 7326c9044..8959797eb 100644
> --- a/man2/msgget.2
> +++ b/man2/msgget.2
> @@ -37,7 +37,6 @@
>  msgget \- get a System V message queue identifier
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
>  .B #include <sys/ipc.h>
>  .B #include <sys/msg.h>
>  .PP
> @@ -190,17 +189,15 @@ would be exceeded.
>  POSIX.1-2001, POSIX.1-2008, SVr4.
>  .SH NOTES
>  The inclusion of
> -.I <sys/types.h>
> -and
>  .I <sys/ipc.h>
>  isn't required on Linux or by any version of POSIX.
>  However,
> -some old implementations required the inclusion of these header files,
> -and the SVID also documented their inclusion.
> +some old implementations required the inclusion of this header file,
> +and the SVID also documented its inclusion.
>  Applications intended to be portable to such old systems may need
> -to include these header files.
> +to include this header file.
>  .\" Like Linux, the FreeBSD man pages still document
> -.\" the inclusion of these header files.
> +.\" the inclusion of this header file.
>  .PP
>  .B IPC_PRIVATE
>  isn't a flag field but a
> diff --git a/man2/msgop.2 b/man2/msgop.2
> index ef66eb10d..92cc94549 100644
> --- a/man2/msgop.2
> +++ b/man2/msgop.2
> @@ -42,7 +42,6 @@
>  msgrcv, msgsnd \- System V message queue operations
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
>  .B #include <sys/ipc.h>
>  .B #include <sys/msg.h>
>  .PP
> @@ -482,17 +481,15 @@ their definitions can be obtained by defining the
>  feature test macro.
>  .SH NOTES
>  The inclusion of
> -.I <sys/types.h>
> -and
>  .I <sys/ipc.h>
>  isn't required on Linux or by any version of POSIX.
>  However,
> -some old implementations required the inclusion of these header files,
> -and the SVID also documented their inclusion.
> +some old implementations required the inclusion of this header file,
> +and the SVID also documented its inclusion.
>  Applications intended to be portable to such old systems may need
> -to include these header files.
> +to include this header file.
>  .\" Like Linux, the FreeBSD man pages still document
> -.\" the inclusion of these header files.
> +.\" the inclusion of this header file.
>  .PP
>  The
>  .I msgp
> diff --git a/man2/open.2 b/man2/open.2
> index 267e79656..3b853d8e2 100644
> --- a/man2/open.2
> +++ b/man2/open.2
> @@ -53,7 +53,6 @@
>  open, openat, creat \- open and possibly create a file
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
>  .B #include <sys/stat.h>
>  .B #include <fcntl.h>
>  .PP
> diff --git a/man2/open_by_handle_at.2 b/man2/open_by_handle_at.2
> index 09349066d..4ae0f0577 100644
> --- a/man2/open_by_handle_at.2
> +++ b/man2/open_by_handle_at.2
> @@ -29,7 +29,6 @@ for a pathname and open file via a handle
>  .SH SYNOPSIS
>  .nf
>  .BR "#define _GNU_SOURCE" "         /* See feature_test_macros(7) */"
> -.B #include <sys/types.h>
>  .B #include <sys/stat.h>
>  .B #include <fcntl.h>
>  .PP
> diff --git a/man2/openat2.2 b/man2/openat2.2
> index 739ac4747..ff0ff839f 100644
> --- a/man2/openat2.2
> +++ b/man2/openat2.2
> @@ -26,7 +26,6 @@
>  openat2 \- open and possibly create a file (extended)
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
>  .B #include <sys/stat.h>
>  .B #include <fcntl.h>
>  .B #include <linux/openat2.h>
> diff --git a/man2/pidfd_open.2 b/man2/pidfd_open.2
> index b25b74273..5601f8005 100644
> --- a/man2/pidfd_open.2
> +++ b/man2/pidfd_open.2
> @@ -27,8 +27,6 @@
>  pidfd_open \- obtain a file descriptor that refers to a process
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
> -.PP
>  .BI "int pidfd_open(pid_t " pid ", unsigned int " flags );
>  .fi
>  .PP
> diff --git a/man2/recv.2 b/man2/recv.2
> index 3a501f9ad..e6005e8d6 100644
> --- a/man2/recv.2
> +++ b/man2/recv.2
> @@ -43,7 +43,6 @@
>  recv, recvfrom, recvmsg \- receive a message from a socket
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
>  .B #include <sys/socket.h>
>  .PP
>  .BI "ssize_t recv(int " sockfd ", void *" buf ", size_t " len ", int " flags );
> diff --git a/man2/removexattr.2 b/man2/removexattr.2
> index 6ef3349e6..175494010 100644
> --- a/man2/removexattr.2
> +++ b/man2/removexattr.2
> @@ -28,7 +28,6 @@ removexattr, lremovexattr, fremovexattr \- remove an extended attribute
>  .SH SYNOPSIS
>  .fam C
>  .nf
> -.B #include <sys/types.h>
>  .B #include <sys/xattr.h>
>  .PP
>  .BI "int removexattr(const char\ *" path ", const char\ *" name );
> diff --git a/man2/request_key.2 b/man2/request_key.2
> index 89bde01c3..7efa6ee46 100644
> --- a/man2/request_key.2
> +++ b/man2/request_key.2
> @@ -14,7 +14,6 @@
>  request_key \- request a key from the kernel's key management facility
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
>  .B #include <keyutils.h>
>  .PP
>  .BI "key_serial_t request_key(const char *" type ", const char *" description ,
> diff --git a/man2/semctl.2 b/man2/semctl.2
> index a99c6fb87..2b75341d7 100644
> --- a/man2/semctl.2
> +++ b/man2/semctl.2
> @@ -44,7 +44,6 @@
>  semctl \- System V semaphore control operations
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
>  .B #include <sys/ipc.h>
>  .B #include <sys/sem.h>
>  .PP
> @@ -538,15 +537,13 @@ but, since Linux 2.4, the field has the type
>  .IR "unsigned\ long" .
>  .SH NOTES
>  The inclusion of
> -.I <sys/types.h>
> -and
>  .I <sys/ipc.h>
>  isn't required on Linux or by any version of POSIX.
>  However,
> -some old implementations required the inclusion of these header files,
> -and the SVID also documented their inclusion.
> +some old implementations required the inclusion of this header file,
> +and the SVID also documented its inclusion.
>  Applications intended to be portable to such old systems may need
> -to include these header files.
> +to include this header file.
>  .\" Like Linux, the FreeBSD man pages still document
>  .\" the inclusion of these header files.
>  .PP
> diff --git a/man2/semget.2 b/man2/semget.2
> index 445ac0249..b991f822f 100644
> --- a/man2/semget.2
> +++ b/man2/semget.2
> @@ -39,7 +39,6 @@
>  semget \- get a System V semaphore set identifier
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
>  .B #include <sys/ipc.h>
>  .B #include <sys/sem.h>
>  .fi
> @@ -221,17 +220,15 @@ SVr4, POSIX.1-2001.
>  .\" ERANGE, EFAULT.
>  .SH NOTES
>  The inclusion of
> -.I <sys/types.h>
> -and
>  .I <sys/ipc.h>
>  isn't required on Linux or by any version of POSIX.
>  However,
> -some old implementations required the inclusion of these header files,
> -and the SVID also documented their inclusion.
> +some old implementations required the inclusion of this header file,
> +and the SVID also documented its inclusion.
>  Applications intended to be portable to such old systems may need
> -to include these header files.
> +to include this header file.
>  .\" Like Linux, the FreeBSD man pages still document
> -.\" the inclusion of these header files.
> +.\" the inclusion of this header file.
>  .PP
>  .B IPC_PRIVATE
>  isn't a flag field but a
> diff --git a/man2/semop.2 b/man2/semop.2
> index ce970b577..a0595b68a 100644
> --- a/man2/semop.2
> +++ b/man2/semop.2
> @@ -37,7 +37,6 @@
>  semop, semtimedop \- System V semaphore operations
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
>  .B #include <sys/ipc.h>
>  .B #include <sys/sem.h>
>  .PP
> @@ -385,17 +384,15 @@ POSIX.1-2001, POSIX.1-2008, SVr4.
>  .\" SVr4 documents additional error conditions EINVAL, EFBIG, ENOSPC.
>  .SH NOTES
>  The inclusion of
> -.I <sys/types.h>
> -and
>  .I <sys/ipc.h>
>  isn't required on Linux or by any version of POSIX.
>  However,
> -some old implementations required the inclusion of these header files,
> -and the SVID also documented their inclusion.
> +some old implementations required the inclusion of this header file,
> +and the SVID also documented its inclusion.
>  Applications intended to be portable to such old systems may need
> -to include these header files.
> +to include this header file.
>  .\" Like Linux, the FreeBSD man pages still document
> -.\" the inclusion of these header files.
> +.\" the inclusion of this header file.
>  .PP
>  The
>  .I sem_undo
> diff --git a/man2/send.2 b/man2/send.2
> index 42fa5bf54..a6199922b 100644
> --- a/man2/send.2
> +++ b/man2/send.2
> @@ -42,7 +42,6 @@
>  send, sendto, sendmsg \- send a message on a socket
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
>  .B #include <sys/socket.h>
>  .PP
>  .BI "ssize_t send(int " sockfd ", const void *" buf ", size_t " len \
> diff --git a/man2/seteuid.2 b/man2/seteuid.2
> index 0bc20b268..f662c0838 100644
> --- a/man2/seteuid.2
> +++ b/man2/seteuid.2
> @@ -31,7 +31,6 @@
>  seteuid, setegid \- set effective user or group ID
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
>  .B #include <unistd.h>
>  .PP
>  .BI "int seteuid(uid_t " euid );
> diff --git a/man2/setgid.2 b/man2/setgid.2
> index 728b57398..15d2348d3 100644
> --- a/man2/setgid.2
> +++ b/man2/setgid.2
> @@ -32,7 +32,6 @@
>  setgid \- set group identity
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
>  .B #include <unistd.h>
>  .PP
>  .BI "int setgid(gid_t " gid );
> diff --git a/man2/setpgid.2 b/man2/setpgid.2
> index be17bc053..093ecd327 100644
> --- a/man2/setpgid.2
> +++ b/man2/setpgid.2
> @@ -50,7 +50,6 @@
>  setpgid, getpgid, setpgrp, getpgrp \- set/get process group
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
>  .B #include <unistd.h>
>  .PP
>  .BI "int setpgid(pid_t " pid ", pid_t " pgid );
> diff --git a/man2/setreuid.2 b/man2/setreuid.2
> index 90ca93a9a..d0f27a6ee 100644
> --- a/man2/setreuid.2
> +++ b/man2/setreuid.2
> @@ -48,7 +48,6 @@
>  setreuid, setregid \- set real and/or effective user or group ID
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
>  .B #include <unistd.h>
>  .PP
>  .BI "int setreuid(uid_t " ruid ", uid_t " euid );
> diff --git a/man2/setsid.2 b/man2/setsid.2
> index 38d5fb1fb..236a915ff 100644
> --- a/man2/setsid.2
> +++ b/man2/setsid.2
> @@ -34,7 +34,6 @@ setsid \- creates a session and sets the process group ID
>  .SH SYNOPSIS
>  .nf
>  .ad l
> -.B #include <sys/types.h>
>  .B #include <unistd.h>
>  .PP
>  .B pid_t setsid(void);
> diff --git a/man2/setuid.2 b/man2/setuid.2
> index d8e461552..a7669258c 100644
> --- a/man2/setuid.2
> +++ b/man2/setuid.2
> @@ -33,7 +33,6 @@
>  setuid \- set user identity
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
>  .B #include <unistd.h>
>  .PP
>  .BI "int setuid(uid_t " uid );
> diff --git a/man2/setxattr.2 b/man2/setxattr.2
> index ebcfa4ded..dbc50e36e 100644
> --- a/man2/setxattr.2
> +++ b/man2/setxattr.2
> @@ -28,7 +28,6 @@ setxattr, lsetxattr, fsetxattr \- set an extended attribute value
>  .SH SYNOPSIS
>  .fam C
>  .nf
> -.B #include <sys/types.h>
>  .B #include <sys/xattr.h>
>  .PP
>  .BI "int setxattr(const char\ *" path ", const char\ *" name ,
> diff --git a/man2/shmctl.2 b/man2/shmctl.2
> index 0d564293a..6acc0b787 100644
> --- a/man2/shmctl.2
> +++ b/man2/shmctl.2
> @@ -467,17 +467,15 @@ POSIX.1-2001, POSIX.1-2008, SVr4.
>  .\" an EIDRM error condition.
>  .SH NOTES
>  The inclusion of
> -.I <sys/types.h>
> -and
>  .I <sys/ipc.h>
>  isn't required on Linux or by any version of POSIX.
>  However,
> -some old implementations required the inclusion of these header files,
> -and the SVID also documented their inclusion.
> +some old implementations required the inclusion of this header file,
> +and the SVID also documented its inclusion.
>  Applications intended to be portable to such old systems may need
> -to include these header files.
> +to include this header file.
>  .\" Like Linux, the FreeBSD man pages still document
> -.\" the inclusion of these header files.
> +.\" the inclusion of this header file.
>  .PP
>  The
>  .BR IPC_INFO ,
> diff --git a/man2/socket.2 b/man2/socket.2
> index 2a22567c7..0c3523a2e 100644
> --- a/man2/socket.2
> +++ b/man2/socket.2
> @@ -44,7 +44,6 @@
>  socket \- create an endpoint for communication
>  .SH SYNOPSIS
>  .nf
> -.BR "#include <sys/types.h>" "          /* See NOTES */"
>  .B #include <sys/socket.h>
>  .PP
>  .BI "int socket(int " domain ", int " type ", int " protocol );
> @@ -467,12 +466,6 @@ It is generally portable to/from
>  non-BSD systems supporting clones of the BSD socket layer (including
>  System\ V variants).
>  .SH NOTES
> -POSIX.1 does not require the inclusion of
> -.IR <sys/types.h> ,
> -and this header file is not required on Linux.
> -However, some historical (BSD) implementations required this header
> -file, and portable applications are probably wise to include it.
> -.PP
>  The manifest constants used under 4.x BSD for protocol families
>  are
>  .BR PF_UNIX ,
> diff --git a/man2/socketpair.2 b/man2/socketpair.2
> index 629cf0f48..1f5c3aec2 100644
> --- a/man2/socketpair.2
> +++ b/man2/socketpair.2
> @@ -44,7 +44,6 @@
>  socketpair \- create a pair of connected sockets
>  .SH SYNOPSIS
>  .nf
> -.BR "#include <sys/types.h>" "          /* See NOTES */"
>  .B #include <sys/socket.h>
>  .PP
>  .BI "int socketpair(int " domain ", int " type ", int " protocol \
> @@ -130,12 +129,6 @@ flags in the
>  .I type
>  argument, as described in
>  .BR socket (2).
> -.PP
> -POSIX.1 does not require the inclusion of
> -.IR <sys/types.h> ,
> -and this header file is not required on Linux.
> -However, some historical (BSD) implementations required this header
> -file, and portable applications are probably wise to include it.
>  .SH SEE ALSO
>  .BR pipe (2),
>  .BR read (2),
> diff --git a/man2/statx.2 b/man2/statx.2
> index aeb3d377d..8b99fb3d2 100644
> --- a/man2/statx.2
> +++ b/man2/statx.2
> @@ -32,7 +32,6 @@
>  statx \- get file status (extended)
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
>  .B #include <sys/stat.h>
>  .B #include <unistd.h>
>  .BR "#include <fcntl.h>           " "/* Definition of AT_* constants */"
> diff --git a/man2/vfork.2 b/man2/vfork.2
> index dbb803b66..73a8fff62 100644
> --- a/man2/vfork.2
> +++ b/man2/vfork.2
> @@ -31,7 +31,6 @@
>  vfork \- create a child process and block parent
>  .SH SYNOPSIS
>  .nf
> -.B #include <sys/types.h>
>  .B #include <unistd.h>
>  .PP
>  .B pid_t vfork(void);
>
  
Joseph Myers March 15, 2021, 6:25 p.m. UTC | #4
On Sun, 14 Mar 2021, Zack Weinberg wrote:

> I endorse this change.  For glibc, if the header file containing the
> function prototype doesn't also provide everything you need to call
> the function, it's a bug (except for a few cases where the relevant
> standards prevent us from doing this, e.g. a function that calls
> vprintf will need the macros in <stdarg.h>, but the C standard
> specifically forbids <stdio.h> to include <stdarg.h>).

And in particular, where older POSIX doesn't require the types used in the 
function declarations to be defined by a header, but permits them to be 
defined by virtue of the general *_t reservation in POSIX (that's not in 
ISO C), it's appropriate to define those types whenever declaring 
functions that use them, rather than only for the newer POSIX versions 
that require those types to be defined alongside declaring the functions 
that use them.  (So we could simplify some of the conditionals in unistd.h 
and remove the "# define uid_t __uid_t" and similar hacks in 
conform/data/unistd.h-data, for example.)
  
Alejandro Colomar March 19, 2021, 8:35 p.m. UTC | #5
Hi Joseph,

On 3/15/21 7:25 PM, Joseph Myers wrote:
> On Sun, 14 Mar 2021, Zack Weinberg wrote:
> 
>> I endorse this change.  For glibc, if the header file containing the
>> function prototype doesn't also provide everything you need to call
>> the function, it's a bug (except for a few cases where the relevant
>> standards prevent us from doing this, e.g. a function that calls
>> vprintf will need the macros in <stdarg.h>, but the C standard
>> specifically forbids <stdio.h> to include <stdarg.h>).
> 
> And in particular, where older POSIX doesn't require the types used in the 
> function declarations to be defined by a header, but permits them to be 
> defined by virtue of the general *_t reservation in POSIX (that's not in 
> ISO C), it's appropriate to define those types whenever declaring 
> functions that use them, rather than only for the newer POSIX versions 
> that require those types to be defined alongside declaring the functions 
> that use them.  (So we could simplify some of the conditionals in unistd.h 
> and remove the "# define uid_t __uid_t" and similar hacks in 
> conform/data/unistd.h-data, for example.)


If you plan to do that (simplify glibc), maybe the changes I'm doing
right now may help you.  It'll take me a few months to complete, but I
plan to further clean the includes in the SYNOPSIS of man[23], so that
only the include that provides the prototype is listed, and if any other
headers are needed, they'll have an explicit comment about why.

After that is merged, you should be able to list all the SYNOPSIS of
man[23] (check our <scripts/bash_aliases> for that) and see which
specify more than one header (and therefore you'll be able to check if a
standard requires it, or if it's a bug in glibc).  I'll CC you both when
I push those changes.

Cheers,

Alex
  

Patch

diff --git a/man2/accept.2 b/man2/accept.2
index 0923ea97a..a5d642cc3 100644
--- a/man2/accept.2
+++ b/man2/accept.2
@@ -43,7 +43,6 @@ 
 accept, accept4 \- accept a connection on a socket
 .SH SYNOPSIS
 .nf
-.BR "#include <sys/types.h>" "          /* See NOTES */"
 .B #include <sys/socket.h>
 .PP
 .BI "int accept(int " sockfd ", struct sockaddr *restrict " addr ,
@@ -319,12 +318,6 @@  of file status flags and always explicitly set all required flags on
 the socket returned from
 .BR accept ().
 .SH NOTES
-POSIX.1-2001 does not require the inclusion of
-.IR <sys/types.h> ,
-and this header file is not required on Linux.
-However, some historical (BSD) implementations required this header
-file, and portable applications are probably wise to include it.
-.PP
 There may not always be a connection waiting after a
 .B SIGIO
 is delivered or
diff --git a/man2/bind.2 b/man2/bind.2
index 548391f1d..e4765dde0 100644
--- a/man2/bind.2
+++ b/man2/bind.2
@@ -71,7 +71,6 @@ 
 bind \- bind a name to a socket
 .SH SYNOPSIS
 .nf
-.BR "#include <sys/types.h>" "          /* See NOTES */"
 .B #include <sys/socket.h>
 .PP
 .BI "int bind(int " sockfd ", const struct sockaddr *" addr ,
@@ -243,12 +242,6 @@  first appeared in 4.2BSD).
 .\" .B EISDIR
 .\" UNIX-domain error conditions.
 .SH NOTES
-POSIX.1 does not require the inclusion of
-.IR <sys/types.h> ,
-and this header file is not required on Linux.
-However, some historical (BSD) implementations required this header
-file, and portable applications are probably wise to include it.
-.PP
 For background on the
 .I socklen_t
 type, see
diff --git a/man2/connect.2 b/man2/connect.2
index 9572676ef..013a46994 100644
--- a/man2/connect.2
+++ b/man2/connect.2
@@ -69,7 +69,6 @@ 
 connect \- initiate a connection on a socket
 .SH SYNOPSIS
 .nf
-.BR "#include <sys/types.h>" "          /* See NOTES */"
 .B #include <sys/socket.h>
 .PP
 .BI "int connect(int " sockfd ", const struct sockaddr *" addr ,
@@ -276,12 +275,6 @@  first appeared in 4.2BSD).
 .\" It also
 .\" documents many additional error conditions not described here.
 .SH NOTES
-POSIX.1 does not require the inclusion of
-.IR <sys/types.h> ,
-and this header file is not required on Linux.
-However, some historical (BSD) implementations required this header
-file, and portable applications are probably wise to include it.
-.PP
 For background on the
 .I socklen_t
 type, see
diff --git a/man2/fork.2 b/man2/fork.2
index 894a628cc..344b9f6eb 100644
--- a/man2/fork.2
+++ b/man2/fork.2
@@ -41,7 +41,6 @@ 
 fork \- create a child process
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
 .B #include <unistd.h>
 .PP
 .B pid_t fork(void);
diff --git a/man2/get_robust_list.2 b/man2/get_robust_list.2
index b1ae42dbd..ac73bfab0 100644
--- a/man2/get_robust_list.2
+++ b/man2/get_robust_list.2
@@ -33,7 +33,6 @@  get_robust_list, set_robust_list \- get/set list of robust futexes
 .SH SYNOPSIS
 .nf
 .B #include <linux/futex.h>
-.B #include <sys/types.h>
 .B #include <syscall.h>
 .PP
 .BI "long get_robust_list(int " pid ", struct robust_list_head **" head_ptr ,
diff --git a/man2/getgid.2 b/man2/getgid.2
index e0c802e36..4c2ec6163 100644
--- a/man2/getgid.2
+++ b/man2/getgid.2
@@ -28,7 +28,6 @@  getgid, getegid \- get group identity
 .SH SYNOPSIS
 .nf
 .B #include <unistd.h>
-.B #include <sys/types.h>
 .PP
 .B gid_t getgid(void);
 .B gid_t getegid(void);
diff --git a/man2/getgroups.2 b/man2/getgroups.2
index ffe01fbb1..a90894b8a 100644
--- a/man2/getgroups.2
+++ b/man2/getgroups.2
@@ -34,7 +34,6 @@ 
 getgroups, setgroups \- get/set list of supplementary group IDs
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
 .B #include <unistd.h>
 .PP
 .BI "int getgroups(int " size ", gid_t " list []);
diff --git a/man2/getpid.2 b/man2/getpid.2
index f2bf232ca..b2574c4c3 100644
--- a/man2/getpid.2
+++ b/man2/getpid.2
@@ -27,7 +27,6 @@ 
 getpid, getppid \- get process identification
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
 .B #include <unistd.h>
 .PP
 .B pid_t getpid(void);
diff --git a/man2/getsid.2 b/man2/getsid.2
index 11d096a1a..805ffe0bd 100644
--- a/man2/getsid.2
+++ b/man2/getsid.2
@@ -29,7 +29,6 @@ 
 getsid \- get session ID
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
 .B #include <unistd.h>
 .PP
 .BI "pid_t getsid(pid_t" " pid" );
diff --git a/man2/getsockopt.2 b/man2/getsockopt.2
index 9b2c6cc3d..8011a4b5a 100644
--- a/man2/getsockopt.2
+++ b/man2/getsockopt.2
@@ -46,7 +46,6 @@ 
 getsockopt, setsockopt \- get and set options on sockets
 .SH SYNOPSIS
 .nf
-.BR "#include <sys/types.h>" "          /* See NOTES */"
 .B #include <sys/socket.h>
 .PP
 .BI "int getsockopt(int " sockfd ", int " level ", int " optname ,
@@ -179,12 +178,6 @@  SVr4, 4.4BSD (these system calls first appeared in 4.2BSD).
 .\" .BR SO_SNDLOWAT ", " SO_RCVLOWAT ", " SO_SNDTIMEO ", " SO_RCVTIMEO
 .\" options
 .SH NOTES
-POSIX.1 does not require the inclusion of
-.IR <sys/types.h> ,
-and this header file is not required on Linux.
-However, some historical (BSD) implementations required this header
-file, and portable applications are probably wise to include it.
-.PP
 For background on the
 .I socklen_t
 type, see
diff --git a/man2/gettid.2 b/man2/gettid.2
index 60780e2b7..13313caa4 100644
--- a/man2/gettid.2
+++ b/man2/gettid.2
@@ -30,7 +30,6 @@  gettid \- get thread identification
 .nf
 .B #define _GNU_SOURCE
 .B #include <unistd.h>
-.B #include <sys/types.h>
 .PP
 .B pid_t gettid(void);
 .fi
diff --git a/man2/getuid.2 b/man2/getuid.2
index 6c2768643..e374d21ab 100644
--- a/man2/getuid.2
+++ b/man2/getuid.2
@@ -29,7 +29,6 @@  getuid, geteuid \- get user identity
 .SH SYNOPSIS
 .nf
 .B #include <unistd.h>
-.B #include <sys/types.h>
 .PP
 .B uid_t getuid(void);
 .B uid_t geteuid(void);
diff --git a/man2/getxattr.2 b/man2/getxattr.2
index d7a92f901..d63e45bd2 100644
--- a/man2/getxattr.2
+++ b/man2/getxattr.2
@@ -28,7 +28,6 @@  getxattr, lgetxattr, fgetxattr \- retrieve an extended attribute value
 .SH SYNOPSIS
 .fam C
 .nf
-.B #include <sys/types.h>
 .B #include <sys/xattr.h>
 .PP
 .BI "ssize_t getxattr(const char *" path ", const char *" name ,
diff --git a/man2/keyctl.2 b/man2/keyctl.2
index 99cb65e19..a6daafe7a 100644
--- a/man2/keyctl.2
+++ b/man2/keyctl.2
@@ -30,7 +30,6 @@ 
 keyctl \- manipulate the kernel's key management facility
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
 .B #include <keyutils.h>
 .PP
 .BI "long keyctl(int " operation ", ...);"
diff --git a/man2/kill.2 b/man2/kill.2
index b6fa289ab..9b27726d7 100644
--- a/man2/kill.2
+++ b/man2/kill.2
@@ -46,7 +46,6 @@ 
 kill \- send signal to a process
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
 .B #include <signal.h>
 .PP
 .BI "int kill(pid_t " pid ", int " sig );
diff --git a/man2/listen.2 b/man2/listen.2
index 7c944ff4c..5e12bc756 100644
--- a/man2/listen.2
+++ b/man2/listen.2
@@ -47,7 +47,6 @@ 
 listen \- listen for connections on a socket
 .SH SYNOPSIS
 .nf
-.BR "#include <sys/types.h>" "          /* See NOTES */"
 .B #include <sys/socket.h>
 .PP
 .BI "int listen(int " sockfd ", int " backlog );
@@ -140,12 +139,6 @@  Connections are accepted with
 .BR accept (2).
 .RE
 .PP
-POSIX.1 does not require the inclusion of
-.IR <sys/types.h> ,
-and this header file is not required on Linux.
-However, some historical (BSD) implementations required this header
-file, and portable applications are probably wise to include it.
-.PP
 The behavior of the
 .I backlog
 argument on TCP sockets changed with Linux 2.2.
diff --git a/man2/listxattr.2 b/man2/listxattr.2
index f073c5409..03595a9e6 100644
--- a/man2/listxattr.2
+++ b/man2/listxattr.2
@@ -29,7 +29,6 @@  listxattr, llistxattr, flistxattr \- list extended attribute names
 .SH SYNOPSIS
 .fam C
 .nf
-.B #include <sys/types.h>
 .B #include <sys/xattr.h>
 .PP
 .BI "ssize_t listxattr(const char *" path ", char *" list \
diff --git a/man2/llseek.2 b/man2/llseek.2
index a46ce370e..81bb4e19f 100644
--- a/man2/llseek.2
+++ b/man2/llseek.2
@@ -31,7 +31,6 @@ 
 _llseek \- reposition read/write file offset
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
 .B #include <unistd.h>
 .PP
 .BI "int _llseek(unsigned int " fd ", unsigned long " offset_high ,
diff --git a/man2/lseek.2 b/man2/lseek.2
index ad5526b66..042479833 100644
--- a/man2/lseek.2
+++ b/man2/lseek.2
@@ -48,7 +48,6 @@ 
 lseek \- reposition read/write file offset
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
 .B #include <unistd.h>
 .PP
 .BI "off_t lseek(int " fd ", off_t " offset ", int " whence );
diff --git a/man2/mkdir.2 b/man2/mkdir.2
index 6934e331a..640a4783d 100644
--- a/man2/mkdir.2
+++ b/man2/mkdir.2
@@ -14,7 +14,6 @@  mkdir, mkdirat \- create a directory
 .SH SYNOPSIS
 .nf
 .B #include <sys/stat.h>
-.B #include <sys/types.h>
 .\" .B #include <unistd.h>
 .PP
 .BI "int mkdir(const char *" pathname ", mode_t " mode );
diff --git a/man2/mknod.2 b/man2/mknod.2
index fad459d8c..9ecf6611b 100644
--- a/man2/mknod.2
+++ b/man2/mknod.2
@@ -17,7 +17,6 @@ 
 mknod, mknodat \- create a special or ordinary file
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
 .B #include <sys/stat.h>
 .B #include <fcntl.h>
 .B #include <unistd.h>
diff --git a/man2/modify_ldt.2 b/man2/modify_ldt.2
index 7dc12be8e..c40dae62b 100644
--- a/man2/modify_ldt.2
+++ b/man2/modify_ldt.2
@@ -27,8 +27,6 @@ 
 modify_ldt \- get or set a per-process LDT entry
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
-.PP
 .BI "int modify_ldt(int " func ", void *" ptr ", unsigned long " bytecount );
 .fi
 .PP
diff --git a/man2/mq_getsetattr.2 b/man2/mq_getsetattr.2
index 409dfe11c..5036428d6 100644
--- a/man2/mq_getsetattr.2
+++ b/man2/mq_getsetattr.2
@@ -27,7 +27,6 @@ 
 mq_getsetattr \- get/set message queue attributes
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
 .B #include <mqueue.h>
 .PP
 .BI "int mq_getsetattr(mqd_t " mqdes ", const struct mq_attr *" newattr ,
diff --git a/man2/msgctl.2 b/man2/msgctl.2
index 1e27871ad..58e8cb29e 100644
--- a/man2/msgctl.2
+++ b/man2/msgctl.2
@@ -40,7 +40,6 @@ 
 msgctl \- System V message control operations
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
 .B #include <sys/ipc.h>
 .B #include <sys/msg.h>
 .PP
@@ -407,17 +406,15 @@  POSIX.1-2001, POSIX.1-2008, SVr4.
 .\" SVID does not document the EIDRM error condition.
 .SH NOTES
 The inclusion of
-.I <sys/types.h>
-and
 .I <sys/ipc.h>
 isn't required on Linux or by any version of POSIX.
 However,
-some old implementations required the inclusion of these header files,
-and the SVID also documented their inclusion.
+some old implementations required the inclusion of this header file,
+and the SVID also documented its inclusion.
 Applications intended to be portable to such old systems may need
-to include these header files.
+to include this header file.
 .\" Like Linux, the FreeBSD man pages still document
-.\" the inclusion of these header files.
+.\" the inclusion of this header file.
 .PP
 The
 .BR IPC_INFO ,
diff --git a/man2/msgget.2 b/man2/msgget.2
index 7326c9044..8959797eb 100644
--- a/man2/msgget.2
+++ b/man2/msgget.2
@@ -37,7 +37,6 @@ 
 msgget \- get a System V message queue identifier
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
 .B #include <sys/ipc.h>
 .B #include <sys/msg.h>
 .PP
@@ -190,17 +189,15 @@  would be exceeded.
 POSIX.1-2001, POSIX.1-2008, SVr4.
 .SH NOTES
 The inclusion of
-.I <sys/types.h>
-and
 .I <sys/ipc.h>
 isn't required on Linux or by any version of POSIX.
 However,
-some old implementations required the inclusion of these header files,
-and the SVID also documented their inclusion.
+some old implementations required the inclusion of this header file,
+and the SVID also documented its inclusion.
 Applications intended to be portable to such old systems may need
-to include these header files.
+to include this header file.
 .\" Like Linux, the FreeBSD man pages still document
-.\" the inclusion of these header files.
+.\" the inclusion of this header file.
 .PP
 .B IPC_PRIVATE
 isn't a flag field but a
diff --git a/man2/msgop.2 b/man2/msgop.2
index ef66eb10d..92cc94549 100644
--- a/man2/msgop.2
+++ b/man2/msgop.2
@@ -42,7 +42,6 @@ 
 msgrcv, msgsnd \- System V message queue operations
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
 .B #include <sys/ipc.h>
 .B #include <sys/msg.h>
 .PP
@@ -482,17 +481,15 @@  their definitions can be obtained by defining the
 feature test macro.
 .SH NOTES
 The inclusion of
-.I <sys/types.h>
-and
 .I <sys/ipc.h>
 isn't required on Linux or by any version of POSIX.
 However,
-some old implementations required the inclusion of these header files,
-and the SVID also documented their inclusion.
+some old implementations required the inclusion of this header file,
+and the SVID also documented its inclusion.
 Applications intended to be portable to such old systems may need
-to include these header files.
+to include this header file.
 .\" Like Linux, the FreeBSD man pages still document
-.\" the inclusion of these header files.
+.\" the inclusion of this header file.
 .PP
 The
 .I msgp
diff --git a/man2/open.2 b/man2/open.2
index 267e79656..3b853d8e2 100644
--- a/man2/open.2
+++ b/man2/open.2
@@ -53,7 +53,6 @@ 
 open, openat, creat \- open and possibly create a file
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
 .B #include <sys/stat.h>
 .B #include <fcntl.h>
 .PP
diff --git a/man2/open_by_handle_at.2 b/man2/open_by_handle_at.2
index 09349066d..4ae0f0577 100644
--- a/man2/open_by_handle_at.2
+++ b/man2/open_by_handle_at.2
@@ -29,7 +29,6 @@  for a pathname and open file via a handle
 .SH SYNOPSIS
 .nf
 .BR "#define _GNU_SOURCE" "         /* See feature_test_macros(7) */"
-.B #include <sys/types.h>
 .B #include <sys/stat.h>
 .B #include <fcntl.h>
 .PP
diff --git a/man2/openat2.2 b/man2/openat2.2
index 739ac4747..ff0ff839f 100644
--- a/man2/openat2.2
+++ b/man2/openat2.2
@@ -26,7 +26,6 @@ 
 openat2 \- open and possibly create a file (extended)
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
 .B #include <sys/stat.h>
 .B #include <fcntl.h>
 .B #include <linux/openat2.h>
diff --git a/man2/pidfd_open.2 b/man2/pidfd_open.2
index b25b74273..5601f8005 100644
--- a/man2/pidfd_open.2
+++ b/man2/pidfd_open.2
@@ -27,8 +27,6 @@ 
 pidfd_open \- obtain a file descriptor that refers to a process
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
-.PP
 .BI "int pidfd_open(pid_t " pid ", unsigned int " flags );
 .fi
 .PP
diff --git a/man2/recv.2 b/man2/recv.2
index 3a501f9ad..e6005e8d6 100644
--- a/man2/recv.2
+++ b/man2/recv.2
@@ -43,7 +43,6 @@ 
 recv, recvfrom, recvmsg \- receive a message from a socket
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
 .B #include <sys/socket.h>
 .PP
 .BI "ssize_t recv(int " sockfd ", void *" buf ", size_t " len ", int " flags );
diff --git a/man2/removexattr.2 b/man2/removexattr.2
index 6ef3349e6..175494010 100644
--- a/man2/removexattr.2
+++ b/man2/removexattr.2
@@ -28,7 +28,6 @@  removexattr, lremovexattr, fremovexattr \- remove an extended attribute
 .SH SYNOPSIS
 .fam C
 .nf
-.B #include <sys/types.h>
 .B #include <sys/xattr.h>
 .PP
 .BI "int removexattr(const char\ *" path ", const char\ *" name );
diff --git a/man2/request_key.2 b/man2/request_key.2
index 89bde01c3..7efa6ee46 100644
--- a/man2/request_key.2
+++ b/man2/request_key.2
@@ -14,7 +14,6 @@ 
 request_key \- request a key from the kernel's key management facility
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
 .B #include <keyutils.h>
 .PP
 .BI "key_serial_t request_key(const char *" type ", const char *" description ,
diff --git a/man2/semctl.2 b/man2/semctl.2
index a99c6fb87..2b75341d7 100644
--- a/man2/semctl.2
+++ b/man2/semctl.2
@@ -44,7 +44,6 @@ 
 semctl \- System V semaphore control operations
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
 .B #include <sys/ipc.h>
 .B #include <sys/sem.h>
 .PP
@@ -538,15 +537,13 @@  but, since Linux 2.4, the field has the type
 .IR "unsigned\ long" .
 .SH NOTES
 The inclusion of
-.I <sys/types.h>
-and
 .I <sys/ipc.h>
 isn't required on Linux or by any version of POSIX.
 However,
-some old implementations required the inclusion of these header files,
-and the SVID also documented their inclusion.
+some old implementations required the inclusion of this header file,
+and the SVID also documented its inclusion.
 Applications intended to be portable to such old systems may need
-to include these header files.
+to include this header file.
 .\" Like Linux, the FreeBSD man pages still document
 .\" the inclusion of these header files.
 .PP
diff --git a/man2/semget.2 b/man2/semget.2
index 445ac0249..b991f822f 100644
--- a/man2/semget.2
+++ b/man2/semget.2
@@ -39,7 +39,6 @@ 
 semget \- get a System V semaphore set identifier
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
 .B #include <sys/ipc.h>
 .B #include <sys/sem.h>
 .fi
@@ -221,17 +220,15 @@  SVr4, POSIX.1-2001.
 .\" ERANGE, EFAULT.
 .SH NOTES
 The inclusion of
-.I <sys/types.h>
-and
 .I <sys/ipc.h>
 isn't required on Linux or by any version of POSIX.
 However,
-some old implementations required the inclusion of these header files,
-and the SVID also documented their inclusion.
+some old implementations required the inclusion of this header file,
+and the SVID also documented its inclusion.
 Applications intended to be portable to such old systems may need
-to include these header files.
+to include this header file.
 .\" Like Linux, the FreeBSD man pages still document
-.\" the inclusion of these header files.
+.\" the inclusion of this header file.
 .PP
 .B IPC_PRIVATE
 isn't a flag field but a
diff --git a/man2/semop.2 b/man2/semop.2
index ce970b577..a0595b68a 100644
--- a/man2/semop.2
+++ b/man2/semop.2
@@ -37,7 +37,6 @@ 
 semop, semtimedop \- System V semaphore operations
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
 .B #include <sys/ipc.h>
 .B #include <sys/sem.h>
 .PP
@@ -385,17 +384,15 @@  POSIX.1-2001, POSIX.1-2008, SVr4.
 .\" SVr4 documents additional error conditions EINVAL, EFBIG, ENOSPC.
 .SH NOTES
 The inclusion of
-.I <sys/types.h>
-and
 .I <sys/ipc.h>
 isn't required on Linux or by any version of POSIX.
 However,
-some old implementations required the inclusion of these header files,
-and the SVID also documented their inclusion.
+some old implementations required the inclusion of this header file,
+and the SVID also documented its inclusion.
 Applications intended to be portable to such old systems may need
-to include these header files.
+to include this header file.
 .\" Like Linux, the FreeBSD man pages still document
-.\" the inclusion of these header files.
+.\" the inclusion of this header file.
 .PP
 The
 .I sem_undo
diff --git a/man2/send.2 b/man2/send.2
index 42fa5bf54..a6199922b 100644
--- a/man2/send.2
+++ b/man2/send.2
@@ -42,7 +42,6 @@ 
 send, sendto, sendmsg \- send a message on a socket
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
 .B #include <sys/socket.h>
 .PP
 .BI "ssize_t send(int " sockfd ", const void *" buf ", size_t " len \
diff --git a/man2/seteuid.2 b/man2/seteuid.2
index 0bc20b268..f662c0838 100644
--- a/man2/seteuid.2
+++ b/man2/seteuid.2
@@ -31,7 +31,6 @@ 
 seteuid, setegid \- set effective user or group ID
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
 .B #include <unistd.h>
 .PP
 .BI "int seteuid(uid_t " euid );
diff --git a/man2/setgid.2 b/man2/setgid.2
index 728b57398..15d2348d3 100644
--- a/man2/setgid.2
+++ b/man2/setgid.2
@@ -32,7 +32,6 @@ 
 setgid \- set group identity
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
 .B #include <unistd.h>
 .PP
 .BI "int setgid(gid_t " gid );
diff --git a/man2/setpgid.2 b/man2/setpgid.2
index be17bc053..093ecd327 100644
--- a/man2/setpgid.2
+++ b/man2/setpgid.2
@@ -50,7 +50,6 @@ 
 setpgid, getpgid, setpgrp, getpgrp \- set/get process group
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
 .B #include <unistd.h>
 .PP
 .BI "int setpgid(pid_t " pid ", pid_t " pgid );
diff --git a/man2/setreuid.2 b/man2/setreuid.2
index 90ca93a9a..d0f27a6ee 100644
--- a/man2/setreuid.2
+++ b/man2/setreuid.2
@@ -48,7 +48,6 @@ 
 setreuid, setregid \- set real and/or effective user or group ID
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
 .B #include <unistd.h>
 .PP
 .BI "int setreuid(uid_t " ruid ", uid_t " euid );
diff --git a/man2/setsid.2 b/man2/setsid.2
index 38d5fb1fb..236a915ff 100644
--- a/man2/setsid.2
+++ b/man2/setsid.2
@@ -34,7 +34,6 @@  setsid \- creates a session and sets the process group ID
 .SH SYNOPSIS
 .nf
 .ad l
-.B #include <sys/types.h>
 .B #include <unistd.h>
 .PP
 .B pid_t setsid(void);
diff --git a/man2/setuid.2 b/man2/setuid.2
index d8e461552..a7669258c 100644
--- a/man2/setuid.2
+++ b/man2/setuid.2
@@ -33,7 +33,6 @@ 
 setuid \- set user identity
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
 .B #include <unistd.h>
 .PP
 .BI "int setuid(uid_t " uid );
diff --git a/man2/setxattr.2 b/man2/setxattr.2
index ebcfa4ded..dbc50e36e 100644
--- a/man2/setxattr.2
+++ b/man2/setxattr.2
@@ -28,7 +28,6 @@  setxattr, lsetxattr, fsetxattr \- set an extended attribute value
 .SH SYNOPSIS
 .fam C
 .nf
-.B #include <sys/types.h>
 .B #include <sys/xattr.h>
 .PP
 .BI "int setxattr(const char\ *" path ", const char\ *" name ,
diff --git a/man2/shmctl.2 b/man2/shmctl.2
index 0d564293a..6acc0b787 100644
--- a/man2/shmctl.2
+++ b/man2/shmctl.2
@@ -467,17 +467,15 @@  POSIX.1-2001, POSIX.1-2008, SVr4.
 .\" an EIDRM error condition.
 .SH NOTES
 The inclusion of
-.I <sys/types.h>
-and
 .I <sys/ipc.h>
 isn't required on Linux or by any version of POSIX.
 However,
-some old implementations required the inclusion of these header files,
-and the SVID also documented their inclusion.
+some old implementations required the inclusion of this header file,
+and the SVID also documented its inclusion.
 Applications intended to be portable to such old systems may need
-to include these header files.
+to include this header file.
 .\" Like Linux, the FreeBSD man pages still document
-.\" the inclusion of these header files.
+.\" the inclusion of this header file.
 .PP
 The
 .BR IPC_INFO ,
diff --git a/man2/socket.2 b/man2/socket.2
index 2a22567c7..0c3523a2e 100644
--- a/man2/socket.2
+++ b/man2/socket.2
@@ -44,7 +44,6 @@ 
 socket \- create an endpoint for communication
 .SH SYNOPSIS
 .nf
-.BR "#include <sys/types.h>" "          /* See NOTES */"
 .B #include <sys/socket.h>
 .PP
 .BI "int socket(int " domain ", int " type ", int " protocol );
@@ -467,12 +466,6 @@  It is generally portable to/from
 non-BSD systems supporting clones of the BSD socket layer (including
 System\ V variants).
 .SH NOTES
-POSIX.1 does not require the inclusion of
-.IR <sys/types.h> ,
-and this header file is not required on Linux.
-However, some historical (BSD) implementations required this header
-file, and portable applications are probably wise to include it.
-.PP
 The manifest constants used under 4.x BSD for protocol families
 are
 .BR PF_UNIX ,
diff --git a/man2/socketpair.2 b/man2/socketpair.2
index 629cf0f48..1f5c3aec2 100644
--- a/man2/socketpair.2
+++ b/man2/socketpair.2
@@ -44,7 +44,6 @@ 
 socketpair \- create a pair of connected sockets
 .SH SYNOPSIS
 .nf
-.BR "#include <sys/types.h>" "          /* See NOTES */"
 .B #include <sys/socket.h>
 .PP
 .BI "int socketpair(int " domain ", int " type ", int " protocol \
@@ -130,12 +129,6 @@  flags in the
 .I type
 argument, as described in
 .BR socket (2).
-.PP
-POSIX.1 does not require the inclusion of
-.IR <sys/types.h> ,
-and this header file is not required on Linux.
-However, some historical (BSD) implementations required this header
-file, and portable applications are probably wise to include it.
 .SH SEE ALSO
 .BR pipe (2),
 .BR read (2),
diff --git a/man2/statx.2 b/man2/statx.2
index aeb3d377d..8b99fb3d2 100644
--- a/man2/statx.2
+++ b/man2/statx.2
@@ -32,7 +32,6 @@ 
 statx \- get file status (extended)
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
 .B #include <sys/stat.h>
 .B #include <unistd.h>
 .BR "#include <fcntl.h>           " "/* Definition of AT_* constants */"
diff --git a/man2/vfork.2 b/man2/vfork.2
index dbb803b66..73a8fff62 100644
--- a/man2/vfork.2
+++ b/man2/vfork.2
@@ -31,7 +31,6 @@ 
 vfork \- create a child process and block parent
 .SH SYNOPSIS
 .nf
-.B #include <sys/types.h>
 .B #include <unistd.h>
 .PP
 .B pid_t vfork(void);