summaryrefslogtreecommitdiffstats
path: root/man2/madvise.2
diff options
context:
space:
mode:
Diffstat (limited to 'man2/madvise.2')
-rw-r--r--man2/madvise.2154
1 files changed, 154 insertions, 0 deletions
diff --git a/man2/madvise.2 b/man2/madvise.2
new file mode 100644
index 000000000..c519492fd
--- /dev/null
+++ b/man2/madvise.2
@@ -0,0 +1,154 @@
+.\" Hey Emacs! This file is -*- nroff -*- source.
+.\"
+.\" Copyright (C) 2001 David Gómez <davidge@jazzfree.com>
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of this
+.\" manual under the conditions for verbatim copying, provided that the
+.\" entire resulting derived work is distributed under the terms of a
+.\" permission notice identical to this one.
+.\"
+.\" Since the Linux kernel and libraries are constantly changing, this
+.\" manual page may be incorrect or out-of-date. The author(s) assume no
+.\" responsibility for errors or omissions, or for damages resulting from
+.\" the use of the information contained herein. The author(s) may not
+.\" have taken the same level of care in the production of this manual,
+.\" which is licensed free of charge, as they might when working
+.\" professionally.
+.\"
+.\" Formatted or processed versions of this manual, if unaccompanied by
+.\" the source, must acknowledge the copyright and authors of this work.
+.\"
+.\" Based on comments from mm/filemap.c. Last modified on 10-06-2001
+.\" Modified, 25 Feb 2002, Michael Kerrisk, <mtk16@ext.canterbury.ac.nz>
+.\" Added notes on MADV_DONTNEED
+.\"
+.TH MADVISE 2 2001-06-10 "Linux 2.4.5" "Linux Programmer's Manual"
+.SH NAME
+madvise \- give advice about use of memory
+.SH SYNOPSIS
+.br
+.B #include <sys/mman.h>
+.sp
+.BI "int madvise(void *" start ", size_t " length ", int " advice );
+.SH DESCRIPTION
+The
+.B madvise
+system call advises the kernel about how to handle paging input/output in
+the address range beginning at address
+.I start
+and with size
+.I length
+bytes. It allows an application to tell the kernel how it expects to use
+some mapped or shared memory areas, so that the kernel can choose
+appropriate read-ahead and caching techniques.
+This call does not influence the semantics of the application
+(except in the case of
+.BR MADV_DONTNEED ),
+but
+may influence its performance. The kernel is free to ignore the advice.
+.LP
+The advice is indicated in the
+.I advice
+parameter which can be
+.TP
+.B MADV_NORMAL
+No special treatment. This is the default.
+.TP
+.B MADV_RANDOM
+Expect page references in random order.
+(Hence, read ahead may be less useful than normally.)
+.TP
+.B MADV_SEQUENTIAL
+Expect page references in sequential order.
+(Hence, pages in the given range can be aggressively read ahead,
+and may be freed soon after they are accessed.)
+.TP
+.B MADV_WILLNEED
+Expect access in the near future.
+(Hence, it might be a good idea to read some pages ahead.)
+.TP
+.B MADV_DONTNEED
+Do not expect access in the near future.
+(For the time being, the application is finished with the given range,
+so the kernel can free resources associated with it.)
+Subsequent accesses of pages in this range will succeed, but will result
+either in re-loading of the memory contents from the underlying mapped file
+(see \fBmmap\fP) or zero-fill-on-demand pages for mappings
+without an underlying file.
+.SH "RETURN VALUE"
+On success
+.B madvise
+returns zero. On error, it returns \-1 and
+.I errno
+is set appropiately.
+.SH ERRORS
+.TP
+.B EAGAIN
+A kernel resource was temporarily unavailable.
+.TP
+.B EBADF
+The map exists, but the area maps something that isn't a file.
+.TP
+.B EINVAL
+The value
+.IR len
+is negative,
+.\" .I len
+.\" is zero,
+.I start
+is not page-aligned,
+.I advice
+is not a valid value, or the application is attempting
+to release locked or shared pages (with MADV_DONTNEED).
+.TP
+.B EIO
+(for MADV_WILLNEED) Paging in this area would exceed the process's
+maximum resident set size.
+.TP
+.B ENOMEM
+(for MADV_WILLNEED) Not enough memory - paging in failed.
+.TP
+.B ENOMEM
+Addresses in the specified range are not currently
+mapped, or are outside the address space of the process.
+.SH "LINUX NOTES"
+.LP
+The current Linux implementation (2.4.0) views this system call
+more as a command than as advice and hence may return an error
+when it cannot do what it usually would do in response to this
+advice. (See the ERRORS description above.)
+This is nonstandard behaviour.
+.LP
+The Linux implementation requires that the address
+.I start
+be page-aligned, and allows
+.I length
+to be zero. If there are some parts of the specified address range
+that are not mapped, the Linux version of
+.B madvise
+ignores them and applies the call to the rest (but returns
+.B ENOMEM
+from the system call, as it should).
+.SH HISTORY
+The
+.B madvise
+function first appeared in 4.4BSD.
+.SH "CONFORMING TO"
+POSIX.1b (POSIX.4).
+POSIX 1003.1-2001 describes
+.B posix_madvise
+with constants POSIX_MADV_NORMAL, etc.,
+with a behaviour close to that described here. There is a similar
+.I posix_fadvise
+for file access.
+.SH "SEE ALSO"
+.BR getrlimit (2),
+.BR mincore (2),
+.BR mmap (2),
+.BR mprotect (2),
+.BR msync (2),
+.BR munmap (2)