aboutsummaryrefslogtreecommitdiffstats
path: root/man/man3/offsetof.3
diff options
context:
space:
mode:
authorAlejandro Colomar <alx@kernel.org>2024-04-26 15:06:49 +0200
committerAlejandro Colomar <alx@kernel.org>2024-05-02 01:24:19 +0200
commitdcde2f70372b49ec43efc5db864c9ff585d0a2dd (patch)
tree78b9b7425130e4a5858e4c01a524d802423879ed /man/man3/offsetof.3
parent12aca537ce78a41bbcdaf485209691e10f8002d7 (diff)
downloadman-pages-dcde2f70372b49ec43efc5db864c9ff585d0a2dd.tar.gz
man/, share/mk/: Move man*/ to man/
This is a scripted change: $ mkdir man/; $ mv man* man/; $ ln -st . man/man*; $ find share/mk/ -type f \ | xargs grep -l '^MANDIR *:=' \ | xargs sed -i '/^MANDIR *:=/s,$,/man,'; $ find share/mk/dist/ -type f \ | xargs grep -l man \ | xargs sed -i 's,man%,man/%,g'; Link: <https://lore.kernel.org/linux-man/YxcV4h+Xn7cd6+q2@pevik/T/> Cc: Petr Vorel <pvorel@suse.cz> Cc: Jakub Wilk <jwilk@jwilk.net> Cc: Stefan Puiu <stefan.puiu@gmail.com> Signed-off-by: Alejandro Colomar <alx@kernel.org>
Diffstat (limited to 'man/man3/offsetof.3')
-rw-r--r--man/man3/offsetof.3110
1 files changed, 110 insertions, 0 deletions
diff --git a/man/man3/offsetof.3 b/man/man3/offsetof.3
new file mode 100644
index 0000000000..7eea85c108
--- /dev/null
+++ b/man/man3/offsetof.3
@@ -0,0 +1,110 @@
+.\" Copyright (C) 2006 Justin Pryzby <pryzbyj@justinpryzby.com>
+.\" and Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
+.\"
+.\" %%%LICENSE_START(PERMISSIVE_MISC)
+.\" Permission is hereby granted, free of charge, to any person obtaining
+.\" a copy of this software and associated documentation files (the
+.\" "Software"), to deal in the Software without restriction, including
+.\" without limitation the rights to use, copy, modify, merge, publish,
+.\" distribute, sublicense, and/or sell copies of the Software, and to
+.\" permit persons to whom the Software is furnished to do so, subject to
+.\" the following conditions:
+.\"
+.\" The above copyright notice and this permission notice shall be
+.\" included in all copies or substantial portions of the Software.
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+.\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+.\" IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+.\" CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+.\" TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+.\" SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+.\" %%%LICENSE_END
+.\"
+.\" References:
+.\" /usr/lib/gcc/i486-linux-gnu/4.1.1/include/stddef.h
+.\" glibc-doc
+.TH offsetof 3 (date) "Linux man-pages (unreleased)"
+.SH NAME
+offsetof \- offset of a structure member
+.SH LIBRARY
+Standard C library
+.RI ( libc ", " \-lc )
+.SH SYNOPSIS
+.nf
+.B #include <stddef.h>
+.P
+.BI "size_t offsetof(" type ", " member );
+.fi
+.SH DESCRIPTION
+The macro
+.BR offsetof ()
+returns the offset of the field
+.I member
+from the start of the structure
+.IR type .
+.P
+This macro is useful because the sizes of the fields that compose
+a structure can vary across implementations,
+and compilers may insert different numbers of padding
+bytes between fields.
+Consequently, an element's offset is not necessarily
+given by the sum of the sizes of the previous elements.
+.P
+A compiler error will result if
+.I member
+is not aligned to a byte boundary
+(i.e., it is a bit field).
+.SH RETURN VALUE
+.BR offsetof ()
+returns the offset of the given
+.I member
+within the given
+.IR type ,
+in units of bytes.
+.SH STANDARDS
+C11, POSIX.1-2008.
+.SH HISTORY
+POSIX.1-2001, C89.
+.SH EXAMPLES
+On a Linux/i386 system, when compiled using the default
+.BR gcc (1)
+options, the program below produces the following output:
+.P
+.in +4n
+.EX
+.RB "$" " ./a.out"
+offsets: i=0; c=4; d=8 a=16
+sizeof(struct s)=16
+.EE
+.in
+.SS Program source
+\&
+.\" SRC BEGIN (offsetof.c)
+.EX
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+\&
+int
+main(void)
+{
+ struct s {
+ int i;
+ char c;
+ double d;
+ char a[];
+ };
+\&
+ /* Output is compiler dependent */
+\&
+ printf("offsets: i=%zu; c=%zu; d=%zu a=%zu\en",
+ offsetof(struct s, i), offsetof(struct s, c),
+ offsetof(struct s, d), offsetof(struct s, a));
+ printf("sizeof(struct s)=%zu\en", sizeof(struct s));
+\&
+ exit(EXIT_SUCCESS);
+}
+.EE
+.\" SRC END