File: strtok.3

package info (click to toggle)
manpages-pl 1%3A0.6-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 20,896 kB
  • ctags: 7
  • sloc: sh: 112; makefile: 59; perl: 32
file content (221 lines) | stat: -rw-r--r-- 9,339 bytes parent folder | download
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
.\" Copyright (C) 2005, 2013 Michael Kerrisk (mtk.manpages@gmail.com)
.\" a few fragments from an earlier (1996) version by
.\" Andries Brouwer (aeb@cwi.nl) remain.
.\"
.\" %%%LICENSE_START(VERBATIM)
.\" 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.
.\" %%%LICENSE_END
.\"
.\" Rewritten old page, 960210, aeb@cwi.nl
.\" Updated, added strtok_r. 2000-02-13 Nicolás Lichtmaier <nick@debian.org>
.\" 2005-11-17, mtk: Substantial parts rewritten
.\" 2013-05-19, mtk: added much further detail on the operation of strtok()
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.\" This file is distributed under the same license as original manpage
.\" Copyright of the original manpage:
.\" Copyright © 1996 Andries Brouwer, 2005,2013 Michael Kerrisk 
.\" Copyright © of Polish translation:
.\" Paweł Wilk (PTM) <siewca@dione.ids.pl>, 1999.
.\" Andrzej Krzysztofowicz (PTM) <ankry@mif.pg.gda.pl>, 2002.
.\" Robert Luberda <robert@debian.org>, 2014.
.TH STRTOK 3 2013\-05\-19 GNU "Podręcznik programisty Linuksa"
.SH NAZWA
strtok, strtok_r \- wydzielanie słów z łańcuchów
.SH SKŁADNIA
.nf
\fB#include <string.h>\fP
.sp
\fBchar *strtok(char *\fP\fIstr\fP\fB, const char *\fP\fIdelim\fP\fB);\fP
.sp
\fBchar *strtok_r(char *\fP\fIstr\fP\fB, const char *\fP\fIdelim\fP\fB, char **\fP\fIsaveptr\fP\fB);\fP
.fi
.sp
.in -4n
Wymagane ustawienia makr biblioteki glibc (patrz \fBfeature_test_macros\fP(7)):
.in
.sp
.ad l
\fBstrtok_r\fP(): _SVID_SOURCE || _BSD_SOURCE || _POSIX_C_SOURCE\ >=\ 1 ||
_XOPEN_SOURCE || _POSIX_SOURCE
.ad b
.SH OPIS
Funkcja \fBstrtok\fP() dzieli łańcuch na sekwencję\ zera lub więcej niepustych
słów. Przy pierwszym wywołaniu funkcji \fBstrtok\fP() łańcuch do przetworzenia
powinien być podany w \fIstr\fP. W każdym kolejnym wywołaniu, które powinno
przetworzyć ten sam łańcuch, \fIstr\fP musi być NULL.

Argument \fIdelim\fP określa zbiór bajtów służących do oddzielania słów w
przetwarzanym łańcuchu. Program wywołujący może podawać różne argumenty
\fIdelim\fP w kolejnych wywołaniach przetwarzających ten sam łańcuch znaków.

Każde wywołanie funkcji \fBstrtok\fP() zwraca wskaźnik do zakończonego znakiem
null łańcuch zawierającego następne słowo. Łańcuch ten nie zawiera znaku
separatora. Jeśli nie ma więcej słów, to \fBstrtok\fP() zwraca NULL.

Sekwencja wywołań \fBstrtok\fP() działająca na tym samym łańcuchu znaków
przechowuje wskaźnik określający punkt, od którego należy szukać kolejnego
słowa. Pierwsze wywołanie \fBstrtok\fP() ustawia ten wskaźnik na pierwszy bajt
łańcucha. Początek kolejnego słowa jest określany przez szukanie kolejnego
bajtu niebędącego ogranicznikiem w \fIstr\fP. Jeśli taki bajt zostanie
znaleziony, to jest uważany za początek kolejnego słowa. Jeśli nie ma
takiego bajtu, to nie ma więcej słów  i \fBstrtok\fP() zwraca NULL (Łańcuch,
który jest pusty, lub taki, który zawiera tylko znaki ogranicznika,
spowoduje, że pierwsze wywołanie \fBstrtok\fP() także zwróci NULL).

Koniec każdego słowa jest określany przez wyszukanie albo następnego bajtu
ogranicznika albo napotkanie kończącego bajtu null (\(aq\e0\(aq). Jeśli
zostanie znaleziony bajt ogranicznika, to jest nadpisywany znakiem null, tak
aby zakończyć bieżące słowo, a \fBstrtok\fP() zachowuje wskaźnik do kolejnego
bajtu; wskaźnik ten będzie użyty jako punkt startowy wyszukiwania kolejnego
słowa. W takim przypadku \fBstrtok\fP() zwraca wskaźnik do początku
znalezionego słowa.

Z powyższego opisu wynika, że sekwencja dwóch lub więcej następujących po
sobie bajtów ogranicznika w przetwarzanym łańcuchu jest uważana za
pojedynczy ogranicznik i że ograniczniki na początku i końcu łańcucha są
zawsze ignorowane. Innymi słowy: słowa zwracane przez \fBstrtok\fP() są zawsze
niepustymi łańcuchami znaków. Dlatego na przykład kolejne wywołanie
\fBstrtok\fP() dla łańcucha "\fIaaa;;bbb,\fP" z łańcuchem ograniczników "\fI;,\fP"
zwrócą słowa "\fIaaa\fP" oraz "\fIbbb\fP", a następnie zwrócą wskaźnik null.

Funkcja \fBstrtok_r\fP() jest wielowątkową wersją  \fBstrtok\fP(). Argument
\fIsaveptr\fP jest wskaźnikiem do zmiennej typu \fIchar\ *\fP, używanej
wewnętrznie przez \fBstrtok_r\fP() do zachowania kontekstu pomiędzy kolejnymi
wywołaniami przetwarzającymi ten sam łańcuch znaków.

Podczas pierwszego wywołania \fBstrtok_r\fP() argument \fIstr\fP powinien
wskazywać na łańcuch do przetworzenia, a wartość \fIsaveptr\fP jest
ignorowana. W kolejnych wywołaniach \fIstr\fP powinien być równy NULL, a
\fIsaveptr\fP nie powinien być zmieniony od poprzedniego wywołania.

Różne łańcuchy znaków mogą być przetwarzane równocześnie przy użyciu
sekwencji wywołań \fBstrtok_r\fP(), różniących się argumentami \fIsaveptr\fP.
.SH "WARTOŚĆ ZWRACANA"
Funkcje \fBstrtok\fP() i \fBstrtok_r\fP() zwracają wskaźnik do następnego słowa
lub NULL, jeśli nie ma już więcej słów.
.SH ATRYBUTY
.SS "Wielowątkowość (patrz pthreads(7))"
Funkcja \fBstrtok\fP() nie jest bezpieczna dla wątków.
.LP
Funkcja \fBstrtok_r\fP() jest bezpieczna dla wątków.
.SH "ZGODNE Z"
.TP 
\fBstrtok\fP()
SVr4, POSIX.1\-2001, 4.3BSD, C89, C99.
.TP 
\fBstrtok_r\fP()
POSIX.1\-2001.
.SH "BŁĘDY IMPLEMENTACJI"
Nigdy nie należy używać tych funkcji. Jeśli jednak zostaną użyte, to należy
zauważyć, że:
.IP * 2
Funkcje te modyfikują swój pierwszy argument.
.IP *
Funkcje ta nie mogą być stosowana z ciągami stałymi.
.IP *
Tożsamość bajtu separatora jest tracona.
.IP *
Funkcja \fBstrtok\fP()  korzysta ze statycznego bufora, więc nie jest
przystosowana do wielowątkowości. Jeśli ma to znaczenie, należy używać
\fBstrtok_r\fP().
.SH PRZYKŁAD
Poniższy program używa zagnieżdżonych pętli, stosując \fBstrtok_r\fP() do
podzielenia łańcucha na dwupoziomową hierarchię słów. Pierwszy argument
linii poleceń określa łańcuch do przetworzenia. Drugi argument podaje bajty
ograniczające używane do dzielenia łańcucha na "główne" słowa. Trzeci
argument określa bajty służące do dzielenia "głównych" słów na podsłowa.
.PP
Przykładowe wyjście programu jest następujące:
.PP
.in +4n
.nf
$\fB ./a.out \(aqa/bbb///cc;xxx:yyy:\(aq \(aq:;\(aq \(aq/\(aq\fP
1: a/bbb///cc
         \-\-> a
         \-\-> bbb
         \-\-> cc
2: xxx
         \-\-> xxx
3: yyy
         \-\-> yyy
.fi
.in
.SS "Żródło programu"
\&
.nf
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int
main(int argc, char *argv[])
{
    char *str1, *str2, *token, *subtoken;
    char *saveptr1, *saveptr2;
    int j;

    if (argc != 4) {
        fprintf(stderr, "Użycie: %s string delim subdelim\en",
                argv[0]);
        exit(EXIT_FAILURE);
    }

    for (j = 1, str1 = argv[1]; ; j++, str1 = NULL) {
        token = strtok_r(str1, argv[2], &saveptr1);
        if (token == NULL)
            break;
        printf("%d: %s\en", j, token);

        for (str2 = token; ; str2 = NULL) {
            subtoken = strtok_r(str2, argv[3], &saveptr2);
            if (subtoken == NULL)
                break;
            printf("\t \-\-> %s\en", subtoken);
        }
    }

    exit(EXIT_SUCCESS);
}
.fi
.PP
Inny przykładowy program używający \fBstrtok\fP() można znaleźć w
\fBgetaddrinfo_a\fP(3).
.SH "ZOBACZ TAKŻE"
\fBindex\fP(3), \fBmemchr\fP(3), \fBrindex\fP(3), \fBstrchr\fP(3), \fBstring\fP(3),
\fBstrpbrk\fP(3), \fBstrsep\fP(3), \fBstrspn\fP(3), \fBstrstr\fP(3), \fBwcstok\fP(3)
.SH "O STRONIE"
Angielska wersja tej strony pochodzi z wydania 3.71 projektu Linux
\fIman\-pages\fP. Opis projektu, informacje dotyczące zgłaszania błędów, oraz
najnowszą wersję oryginału można znaleźć pod adresem
\%http://www.kernel.org/doc/man\-pages/.
.SH TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika man są:
Paweł Wilk (PTM) <siewca@dione.ids.pl>,
Andrzej Krzysztofowicz (PTM) <ankry@mif.pg.gda.pl>
i
Robert Luberda <robert@debian.org>.
.PP
Polskie tłumaczenie jest częścią projektu manpages-pl; uwagi, pomoc, zgłaszanie błędów na stronie http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją \fB 3.71 \fPoryginału.