summaryrefslogtreecommitdiffstats
path: root/man3p/strtok.3p
diff options
context:
space:
mode:
Diffstat (limited to 'man3p/strtok.3p')
-rw-r--r--man3p/strtok.3p179
1 files changed, 179 insertions, 0 deletions
diff --git a/man3p/strtok.3p b/man3p/strtok.3p
new file mode 100644
index 000000000..dc4d732da
--- /dev/null
+++ b/man3p/strtok.3p
@@ -0,0 +1,179 @@
+.\" Copyright (c) 2001-2003 The Open Group, All Rights Reserved
+.TH "STRTOK" P 2003 "IEEE/The Open Group" "POSIX Programmer's Manual"
+.\" strtok
+.SH NAME
+strtok, strtok_r \- split string into tokens
+.SH SYNOPSIS
+.LP
+\fB#include <string.h>
+.br
+.sp
+char *strtok(char *restrict\fP \fIs1\fP\fB, const char *restrict\fP
+\fIs2\fP\fB);
+.br
+\fP
+.LP
+\fBchar *strtok_r(char *restrict\fP \fIs\fP\fB, const char *restrict\fP
+\fIsep\fP\fB,
+.br
+\ \ \ \ \ \ char **restrict\fP \fIlasts\fP\fB); \fP
+\fB
+.br
+\fP
+.SH DESCRIPTION
+.LP
+For \fIstrtok\fP(): The functionality described on this reference
+page is aligned with the ISO\ C standard. Any
+conflict between the requirements described here and the ISO\ C standard
+is unintentional. This volume of
+IEEE\ Std\ 1003.1-2001 defers to the ISO\ C standard.
+.LP
+A sequence of calls to \fIstrtok\fP() breaks the string pointed to
+by \fIs1\fP into a sequence of tokens, each of which is
+delimited by a byte from the string pointed to by \fIs2\fP. The first
+call in the sequence has \fIs1\fP as its first argument,
+and is followed by calls with a null pointer as their first argument.
+The separator string pointed to by \fIs2\fP may be different
+from call to call.
+.LP
+The first call in the sequence searches the string pointed to by \fIs1\fP
+for the first byte that is \fInot\fP contained in
+the current separator string pointed to by \fIs2\fP. If no such byte
+is found, then there are no tokens in the string pointed to
+by \fIs1\fP and \fIstrtok\fP() shall return a null pointer. If such
+a byte is found, it is the start of the first token.
+.LP
+The \fIstrtok\fP() function then searches from there for a byte that
+\fIis\fP contained in the current separator string. If no
+such byte is found, the current token extends to the end of the string
+pointed to by \fIs1\fP, and subsequent searches for a token
+shall return a null pointer. If such a byte is found, it is overwritten
+by a null byte, which terminates the current token. The
+\fIstrtok\fP() function saves a pointer to the following byte, from
+which the next search for a token shall start.
+.LP
+Each subsequent call, with a null pointer as the value of the first
+argument, starts searching from the saved pointer and
+behaves as described above.
+.LP
+The implementation shall behave as if no function defined in this
+volume of IEEE\ Std\ 1003.1-2001 calls
+\fIstrtok\fP().
+.LP
+The
+\fIstrtok\fP() function need not be reentrant. A function that is
+not required to be reentrant is not required to be thread-safe.
+.LP
+The \fIstrtok_r\fP() function considers the null-terminated string
+\fIs\fP as a sequence of zero or more text tokens separated by
+spans of one or more characters from the separator string \fIsep\fP.
+The argument \fIlasts\fP points to a user-provided pointer
+which points to stored information necessary for \fIstrtok_r\fP()
+to continue scanning the same string.
+.LP
+In the first call to \fIstrtok_r\fP(), \fIs\fP points to a null-terminated
+string, \fIsep\fP to a null-terminated string of
+separator characters, and the value pointed to by \fIlasts\fP is ignored.
+The \fIstrtok_r\fP() function shall return a pointer to
+the first character of the first token, write a null character into
+\fIs\fP immediately following the returned token, and update
+the pointer to which \fIlasts\fP points.
+.LP
+In subsequent calls, \fIs\fP is a NULL pointer and \fIlasts\fP shall
+be unchanged from the previous call so that subsequent
+calls shall move through the string \fIs\fP, returning successive
+tokens until no tokens remain. The separator string \fIsep\fP
+may be different from call to call. When no token remains in \fIs\fP,
+a NULL pointer shall be returned.
+.SH RETURN VALUE
+.LP
+Upon successful completion, \fIstrtok\fP() shall return a pointer
+to the first byte of a token. Otherwise, if there is no
+token, \fIstrtok\fP() shall return a null pointer.
+.LP
+The \fIstrtok_r\fP() function shall return a pointer to the token
+found, or a NULL pointer when no token is found.
+.SH ERRORS
+.LP
+No errors are defined.
+.LP
+\fIThe following sections are informative.\fP
+.SH EXAMPLES
+.SS Searching for Word Separators
+.LP
+The following example searches for tokens separated by <space>s.
+.sp
+.RS
+.nf
+
+\fB#include <string.h>
+\&...
+char *token;
+char *line = "LINE TO BE SEPARATED";
+char *search = " ";
+.sp
+
+/* Token will point to "LINE". */
+token = strtok(line, search);
+.sp
+
+/* Token will point to "TO". */
+token = strtok(NULL, search);
+\fP
+.fi
+.RE
+.SS Breaking a Line
+.LP
+The following example uses \fIstrtok\fP() to break a line into two
+character strings separated by any combination of
+<space>s, <tab>s, or <newline>s.
+.sp
+.RS
+.nf
+
+\fB#include <string.h>
+\&...
+struct element {
+ char *key;
+ char *data;
+};
+\&...
+char line[LINE_MAX];
+char *key, *data;
+\&...
+key = strtok(line, " \\n");
+data = strtok(NULL, " \\n");
+\&...
+\fP
+.fi
+.RE
+.SH APPLICATION USAGE
+.LP
+The \fIstrtok_r\fP() function is thread-safe and stores its state
+in a user-supplied buffer instead of possibly using a static
+data area that may be overwritten by an unrelated call from another
+thread.
+.SH RATIONALE
+.LP
+The \fIstrtok\fP() function searches for a separator string within
+a larger string. It returns a pointer to the last substring
+between separator strings. This function uses static storage to keep
+track of the current string position between calls. The new
+function, \fIstrtok_r\fP(), takes an additional argument, \fIlasts\fP,
+to keep track of the current position in the string.
+.SH FUTURE DIRECTIONS
+.LP
+None.
+.SH SEE ALSO
+.LP
+The Base Definitions volume of IEEE\ Std\ 1003.1-2001, \fI<string.h>\fP
+.SH COPYRIGHT
+Portions of this text are reprinted and reproduced in electronic form
+from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology
+-- Portable Operating System Interface (POSIX), The Open Group Base
+Specifications Issue 6, Copyright (C) 2001-2003 by the Institute of
+Electrical and Electronics Engineers, Inc and The Open Group. In the
+event of any discrepancy between this version and the original IEEE and
+The Open Group Standard, the original IEEE and The Open Group Standard
+is the referee document. The original Standard can be obtained online at
+http://www.opengroup.org/unix/online.html .