chiark / gitweb /
wip manpage
[inn-innduct.git] / doc / man / libinnhist.3
1 .\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32
2 .\"
3 .\" Standard preamble:
4 .\" ========================================================================
5 .de Sh \" Subsection heading
6 .br
7 .if t .Sp
8 .ne 5
9 .PP
10 \fB\\$1\fR
11 .PP
12 ..
13 .de Sp \" Vertical space (when we can't use .PP)
14 .if t .sp .5v
15 .if n .sp
16 ..
17 .de Vb \" Begin verbatim text
18 .ft CW
19 .nf
20 .ne \\$1
21 ..
22 .de Ve \" End verbatim text
23 .ft R
24 .fi
25 ..
26 .\" Set up some character translations and predefined strings.  \*(-- will
27 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
28 .\" double quote, and \*(R" will give a right double quote.  \*(C+ will
29 .\" give a nicer C++.  Capital omega is used to do unbreakable dashes and
30 .\" therefore won't be available.  \*(C` and \*(C' expand to `' in nroff,
31 .\" nothing in troff, for use with C<>.
32 .tr \(*W-
33 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
34 .ie n \{\
35 .    ds -- \(*W-
36 .    ds PI pi
37 .    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
38 .    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
39 .    ds L" ""
40 .    ds R" ""
41 .    ds C` ""
42 .    ds C' ""
43 'br\}
44 .el\{\
45 .    ds -- \|\(em\|
46 .    ds PI \(*p
47 .    ds L" ``
48 .    ds R" ''
49 'br\}
50 .\"
51 .\" If the F register is turned on, we'll generate index entries on stderr for
52 .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
53 .\" entries marked with X<> in POD.  Of course, you'll have to process the
54 .\" output yourself in some meaningful fashion.
55 .if \nF \{\
56 .    de IX
57 .    tm Index:\\$1\t\\n%\t"\\$2"
58 ..
59 .    nr % 0
60 .    rr F
61 .\}
62 .\"
63 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
64 .\" way too many mistakes in technical documents.
65 .hy 0
66 .if n .na
67 .\"
68 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
69 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
70 .    \" fudge factors for nroff and troff
71 .if n \{\
72 .    ds #H 0
73 .    ds #V .8m
74 .    ds #F .3m
75 .    ds #[ \f1
76 .    ds #] \fP
77 .\}
78 .if t \{\
79 .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
80 .    ds #V .6m
81 .    ds #F 0
82 .    ds #[ \&
83 .    ds #] \&
84 .\}
85 .    \" simple accents for nroff and troff
86 .if n \{\
87 .    ds ' \&
88 .    ds ` \&
89 .    ds ^ \&
90 .    ds , \&
91 .    ds ~ ~
92 .    ds /
93 .\}
94 .if t \{\
95 .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
96 .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
97 .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
98 .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
99 .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
100 .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
101 .\}
102 .    \" troff and (daisy-wheel) nroff accents
103 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
104 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
105 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
106 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
107 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
108 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
109 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
110 .ds ae a\h'-(\w'a'u*4/10)'e
111 .ds Ae A\h'-(\w'A'u*4/10)'E
112 .    \" corrections for vroff
113 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
114 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
115 .    \" for low resolution devices (crt and lpr)
116 .if \n(.H>23 .if \n(.V>19 \
117 \{\
118 .    ds : e
119 .    ds 8 ss
120 .    ds o a
121 .    ds d- d\h'-1'\(ga
122 .    ds D- D\h'-1'\(hy
123 .    ds th \o'bp'
124 .    ds Th \o'LP'
125 .    ds ae ae
126 .    ds Ae AE
127 .\}
128 .rm #[ #] #H #V #F C
129 .\" ========================================================================
130 .\"
131 .IX Title "libinnhist 3"
132 .TH libinnhist 3 "2008-04-06" "INN 2.4.5" "InterNetNews Documentation"
133 .SH "NAME"
134 his \- routines for managing INN history
135 .SH "SYNOPSIS"
136 .IX Header "SYNOPSIS"
137 \&\fB#include <inn/history.h>\fR
138 .PP
139 \&\fBstruct history;\fR
140 .PP
141 \&\fBstruct histstats {\fR
142 \&\fB    int hitpos;\fR
143 \&\fB    int hitneg;\fR
144 \&\fB    int misses;\fR
145 \&\fB    int dne;\fR
146 \&\fB};\fR
147 .PP
148 \&\fB#define \s-1HIS_RDONLY\s0 ...\fR
149 \&\fB#define \s-1HIS_RDWR\s0 ...\fR
150 \&\fB#define \s-1HIS_CREAT\s0 ...\fR
151 \&\fB#define \s-1HIS_ONDISK\s0 ...\fR
152 \&\fB#define \s-1HIS_INCORE\s0 ...\fR
153 \&\fB#define \s-1HIS_MMAP\s0 ...\fR
154 .PP
155 \&\fBenum {\fR
156 \&\fB    \s-1HISCTLG_PATH\s0,\fR
157 \&\fB    \s-1HISCTLS_PATH\s0,\fR
158 \&\fB    \s-1HISCTLS_SYNCCOUNT\s0,\fR
159 \&\fB    \s-1HISCTLS_NPAIRS\s0,\fR
160 \&\fB    \s-1HISCTLS_IGNOREOLD\s0,\fR
161 \&\fB    \s-1HISCTLS_STATINTERVAL\s0\fR
162 \&\fB};\fR
163 .PP
164 \&\fBstruct history *HISopen(const char *\fR\fIpath\fR\fB, const char *\fR\fImethod\fR\fB, int \fR\fIflags\fR\fB);\fR
165 .PP
166 \&\fBbool HISclose(struct history *\fR\fIhistory\fR\fB);\fR
167 .PP
168 \&\fBbool HISsync(struct history *\fR\fIhistory\fR\fB);\fR
169 .PP
170 \&\fBvoid HISsetcache(struct history *\fR\fIhistory\fR\fB, size_t \fR\fIsize\fR\fB);\fR
171 .PP
172 \&\fBbool HISlookup(struct history *\fR\fIhistory\fR\fB, const char *\fR\fIkey\fR\fB, time_t *\fR\fIarrived\fR\fB, time_t *\fR\fIposted\fR\fB, time_t *\fR\fIexpires\fR\fB, \s-1TOKEN\s0 *\fR\fItoken\fR\fB);\fR
173 .PP
174 \&\fBbool HIScheck(struct history *\fR\fIhistory\fR\fB, const char *\fR\fIkey\fR\fB);\fR
175 .PP
176 \&\fBbool HISwrite(struct history *\fR\fIhistory\fR\fB, const char *\fR\fIkey\fR\fB, time_t \fR\fIarrived\fR\fB, time_t \fR\fIposted\fR\fB, time_t \fR\fIexpires\fR\fB, const \s-1TOKEN\s0 *\fR\fItoken\fR\fB);\fR
177 .PP
178 \&\fBbool HISremember(struct history *\fR\fIhistory\fR\fB, const char *\fR\fIkey\fR\fB, time_t \fR\fIarrived\fR\fB);\fR
179 .PP
180 \&\fBbool HISreplace(struct history *\fR\fIhistory\fR\fB, const char *\fR\fIkey\fR\fB, time_t \fR\fIarrived\fR\fB, time_t \fR\fIposted\fR\fB, time_t \fR\fIexpires\fR\fB, const \s-1TOKEN\s0 *\fR\fItoken\fR\fB);\fR
181 .PP
182 \&\fBbool HISexpire(struct history *\fR\fIhistory\fR\fB, const char *\fR\fIpath\fR\fB, const char *\fR\fIreason\fR\fB, bool \fR\fIwriting\fR\fB, void *\fR\fIcookie\fR\fB, time_t \fR\fIthreshold\fR\fB, bool (*\fR\fIexists\fR\fB)(void *cookie, time_t arrived, time_t posted, time_t expires, const \s-1TOKEN\s0 *token));\fR
183 .PP
184 \&\fBbool HISwalk(struct history *\fR\fIhistory\fR\fB, const char *\fR\fIreason\fR\fB, void *\fR\fIcookie\fR\fB, bool (*\fR\fIcallback\fR\fB)(void *cookie, time_t arrived, time_t posted, time_t expires, const \s-1TOKEN\s0 *token));\fR
185 .PP
186 \&\fBstruct histstats HISstats(struct history *\fR\fIhistory\fR\fB);\fR
187 .PP
188 \&\fBconst char *HISerror(struct history *\fR\fIhistory\fR\fB);\fR
189 .PP
190 \&\fBbool HISctl(struct history *\fR\fIhistory\fR\fB, int \fR\fIrequest\fR\fB, void *\fR\fIval\fR\fB);\fR
191 .SH "DESCRIPTION"
192 .IX Header "DESCRIPTION"
193 These functions provide provide access to the \s-1INN\s0 history
194 database. They maintain key/value pairs in an opaque database whilst
195 providing for expiry of outdated information.
196 .PP
197 The history structure is an opaque handle returned from HISopen.
198 .PP
199 The \fBHISopen\fR function opens the history file designated by \fIpath\fR
200 using the mode \fIflags\fR using the specified \fImethod\fR. \fIflags\fR may be
201 \&\fB\s-1HIS_RDONLY\s0\fR to indicate that read-only access to the history
202 database is desired, or \fB\s-1HIS_RDWR\s0\fR for read/write access. History
203 methods are defined at build time; the history method currently
204 available is \*(L"hisv6\*(R". On success a newly initialised history handle is
205 returned, or \fB\s-1NULL\s0\fR on failure.
206 .PP
207 \&\fB\s-1HIS_ONDISK\s0\fR, \fB\s-1HIS_INCORE\s0\fR and \fB\s-1HIS_MMAP\s0\fR may be logically ORed
208 into \fIflags\fR to provide a hint to the underlying history manager as
209 to how it should handle its data files; \fB\s-1HIS_ONDISK\s0\fR indicates that
210 the caller would like as much of the data to be kept on disk (and out
211 of memory), \fB\s-1HIS_INCORE\s0\fR indicates that the data files should be kept
212 in main memory where possible and \fB\s-1HIS_MMAP\s0\fR that the files should be
213 \&\fImmap()\fRed into the processes address space. \fB\s-1HIS_INCORE\s0\fR is typically
214 used where a mass rebuild of the history database is being performed;
215 the underlying history manager may assume that the caller will call
216 \&\fBHISsync\fR() to sync the data files to disk.
217 .PP
218 The \fB\s-1HIS_CREAT\s0\fR flag indicates that the history database should be
219 initialised as new; if any options which affect creation of the
220 database need to be set an anonymous history handle should be created
221 by calling \fBHISopen\fR with \fIpath\fR set to \fB\s-1NULL\s0\fR, any options set
222 using \fBHISctl\fR, then the database opened by calling \fBHISctl\fR with
223 \&\fB\s-1HISCTLS_PATH\s0\fR.
224 .PP
225 The \fBHISclose\fR function closes the handle \fIhistory\fR and deallocates
226 any resources associated with it. It returns \fBfalse\fR on failure or
227 \&\fBtrue\fR on success.
228 .PP
229 The \fBHISsync\fR function synchronises any outstanding transactions
230 associated with \fIhistory\fR to disk.
231 .PP
232 \&\fBHISsetcache\fR associates a cache used for speeding up HIScheck with
233 \&\fIhistory\fR. The cache will occupy approximately \fIsize\fR bytes.
234 .PP
235 \&\fBHISlookup\fR retrieves a token from \fIhistory\fR based on the passed
236 \&\fIkey\fR (normally the Message\-ID). If no entry with an associated token
237 can be found, \fBHISlookup\fR will return \fBfalse\fR. If a token is found
238 \&\fIarrived\fR, \fIexpires\fR, and \fIposted\fR are filled in with the message
239 arrival, expiry, and posting times respectively (or zero, if the time
240 component is not available), in addition to \fItoken\fR being set to the
241 retrieved token and a function return value of \fBtrue\fR. Any of
242 arrived, expires, posted, or token may be \fB\s-1NULL\s0\fR in which case that
243 component is not returned to the caller, without affecting the return
244 value.
245 .PP
246 \&\fBHIScheck\fR checks the database \fIhistory\fR for \fIkey\fR (normally the
247 Message\-ID); if \fIkey\fR has previously been set via \fBHISwrite\fR,
248 \&\fBHIScheck\fR returns \fBtrue\fR, else \fBfalse\fR.
249 .PP
250 \&\fBHISwrite\fR writes a new entry to the database \fIhistory\fR associated
251 with \fIkey\fR. \fIarrived\fR, \fIposted\fR, and \fIexpired\fR specify the arrival,
252 posting, and expiry time respectively; \fIposted\fR and \fIexpired\fR may be
253 specifed as <= 0 in which case that component shall be treated as
254 absent in the database. \fItoken\fR is associated with the specified
255 \&\fIkey\fR. \fBHISwrite\fR returns \fBtrue\fR on success, or \fBfalse\fR on
256 failure. The behaviour when \fIkey\fR is not unique with respect to the
257 existing entries in \fIhistory\fR is unspecified.
258 .PP
259 \&\fBHISremember\fR writes a new entry to the database \fIhistory\fR
260 associated with \fIkey\fR, merely remembering that this \fIkey\fR has been
261 seen, together with its arrival time \fIarrived\fR. \fBHISremember\fR
262 returns \fBtrue\fR on success, or \fBfalse\fR on failure. The behaviour when
263 \&\fIkey\fR is not unique with respect to the existing entries in
264 \&\fIhistory\fR is unspecified.
265 .PP
266 \&\fBHISreplace\fR replaces an existing entry in the database \fIhistory\fR,
267 associated with \fIkey\fR. \fIarrived\fR, \fIposted\fR, \fIexpired\fR specify the
268 arrival, posting and expiry time respectively; \fIposted\fR and
269 \&\fIexpired\fR may be specifed as <= 0 in which case that component shall
270 be treated as absent in the database. \fItoken\fR is associated with the
271 specified \fIkey\fR; if \fB\s-1NULL\s0\fR then the history database merely
272 remembers that this \fIkey\fR has been seen, together with its arrival
273 time. \fBHISreplace\fR returns \fBtrue\fR on success, or \fBfalse\fR on
274 failure.
275 .PP
276 \&\fBHISexpire\fR expires the history database associated with \fIhistory\fR,
277 creating a new, replacement, database in the same location if \fIpath\fR
278 is \fB\s-1NULL\s0\fR, or in \fIpath\fR if not \fB\s-1NULL\s0\fR; if \fIpath\fR is not \fB\s-1NULL\s0\fR
279 then the replacement of the old history database with the new one is
280 assumed to be performed out of band by the caller. The \fIwriting\fR flag
281 is normally passed as \fBtrue\fR, if you wish to inhibit writing of the
282 new database (and so merely see the callbacks), \fIwriting\fR may be set
283 \&\fBfalse\fR.
284 .PP
285 If the underlying history mechanism needs to pause the server, the
286 \&\fIreason\fR string is used as the argument to the `ctlinnd pause'
287 command, and as such the server should be reserved by the caller prior
288 to calling \fBHISexpire\fR; if the caller wishes to inhibit pausing of
289 the server, passing \fB\s-1NULL\s0\fR will achieve this. If \fIreason\fR is not
290 \&\fB\s-1NULL\s0\fR, then on successful return from \fBHISexpire\fR the server will
291 be left paused and the caller should unpause it.
292 .PP
293 The history database is scanned and entries with an associated storage
294 token are passed to the discrimination function \fIexists\fR.
295 .PP
296 If \fIexists\fR() returns \fBfalse\fR it indicates that stored entity
297 associated with token is no longer available (or no longer required),
298 and therefore the associated history entry may be expired once it
299 meets the \fIthreshold\fR constraint. If \fIexists\fR() returns \fBtrue\fR the
300 entry is kept as-is in the newly expired history database.
301 .PP
302 The \fIexists\fR function is passed the arrival, posting and expiry
303 times, in addition to the token associated with the entry. Note that
304 posting and/or expiry may be zero, but that the token will never be
305 \&\fB\s-1NULL\s0\fR (such entries are handled solely via the threshold
306 mechanism). The storage token passed to the discrimination function
307 may updated if required (for example, as might be needed by a
308 hierachical storage management implementation).
309 .PP
310 Entries in the database with an arrival time less than \fIthreshold\fR
311 with no token associated with them are deleted from the database.
312 .PP
313 The parameter \fIcookie\fR is passed to the discrimination function, and
314 may be used for any purpose required by the caller.
315 .PP
316 If the discrimination function attempts to access the underlying
317 database (for read or write) during the callback, the behaviour is
318 unspecified.
319 .PP
320 \&\fBHISwalk\fR provides an iteration function for the specified \fIhistory\fR
321 database. For every entry in the history database, \fIcallback\fR is
322 invoked, passing the \fIcookie\fR, arrival, posting, and expiry times, in
323 addition to the token associated with the entry. If the \fIcallback\fR()
324 returns \fBfalse\fR the iteration is aborted and \fBHISwalk\fR returns
325 \&\fBfalse\fR to the caller.
326 .PP
327 To process the entire database in the presence of a running server,
328 \&\fIreason\fR may be passed; if this argument is not \fB\s-1NULL\s0\fR, it is used
329 as an an argument to the `ctlinnd (reserve|pause|go)' commands. If
330 \&\fIreason\fR is \fB\s-1NULL\s0\fR and the server is running, the behaviour of
331 \&\fBHISwalk\fR is undefined.
332 .PP
333 If the callback function attempts to access the underlying database
334 during the callback, the behaviour is unspecified.
335 .PP
336 \&\fBHISstats\fR returns statistics on the history cache mechanism; given a
337 handle \fIhistory\fR, the return value is a \fIstruct histstats\fR
338 detailing:
339 .ie n .IP """hitpos""" 4
340 .el .IP "\f(CWhitpos\fR" 4
341 .IX Item "hitpos"
342 The number of times an item was found directly in the cache and known
343 to exist in the underlying history manager.
344 .ie n .IP """hitneg""" 4
345 .el .IP "\f(CWhitneg\fR" 4
346 .IX Item "hitneg"
347 The number of times an item was found directly in the cache and known
348 not to exist in the underlying history manager.
349 .ie n .IP """misses""" 4
350 .el .IP "\f(CWmisses\fR" 4
351 .IX Item "misses"
352 The number of times an item was not found directly in the cache, but
353 on retrieval from the underlying history manager was found to exist.
354 .ie n .IP """dne""" 4
355 .el .IP "\f(CWdne\fR" 4
356 .IX Item "dne"
357 The number of times an item was not found directly in the cache, but
358 on retrieval from the underlying history manager was found not to exist.
359 .PP
360 Note that the history cache is only checked by \fBHIScheck\fR and only
361 affected by \fBHIScheck\fR, \fBHISwrite\fR, \fBHISremember\fR and
362 \&\fBHISreplace\fR. Following a call to \fBHISstats\fR the history statistics
363 associated with \fIhistory\fR are cleared.
364 .PP
365 \&\fBHISerror\fR returns a string describing the most recent error
366 associated with \fIhistory\fR; the format and content of these strings is
367 history manager dependent. Note that on setting an error, the history
368 \&\s-1API\s0 will call the \fBwarn\fR function from \fIlibinn\fR\|(3).
369 .PP
370 \&\fBHISctl\fR provides a control interface to the underlying history
371 manager. The \fIrequest\fR argument determines the type of the request
372 and the meaning of the \fIval\fR argument. The values for \fIrequest\fR are:
373 .ie n .IP """HISCTLG_PATH"" (const char **)" 4
374 .el .IP "\f(CWHISCTLG_PATH\fR (const char **)" 4
375 .IX Item "HISCTLG_PATH (const char **)"
376 Get the base file path which the history handle represents. \fIval\fR
377 should be a pointer to a location of type \fBconst char *\fR.  The
378 result must not later be passed to \fIfree\fR\|(3).
379 .ie n .IP """HISCTLS_PATH"" (const char *)" 4
380 .el .IP "\f(CWHISCTLS_PATH\fR (const char *)" 4
381 .IX Item "HISCTLS_PATH (const char *)"
382 Set the base file path which this history handle should use; typically
383 this is used after an anonymous handle has been created using
384 \&\fBHISopen(\s-1NULL\s0, ...)\fR. \fIval\fR should be a value of type \fBconst char
385 *\fR and will be copied before being stored internally.
386 .ie n .IP """HISCTLS_SYNCCOUNT"" (size_t *)" 4
387 .el .IP "\f(CWHISCTLS_SYNCCOUNT\fR (size_t *)" 4
388 .IX Item "HISCTLS_SYNCCOUNT (size_t *)"
389 Set an upper bound on how many history operations may be pending in
390 core before being synced to permanent storage; \fB0\fR indicates
391 unlimited. \fIval\fR should be a pointer to a value of type \fBsize_t\fR and
392 will not be modified by the call.
393 .ie n .IP """HISCTLS_NPAIRS"" (size_t *)" 4
394 .el .IP "\f(CWHISCTLS_NPAIRS\fR (size_t *)" 4
395 .IX Item "HISCTLS_NPAIRS (size_t *)"
396 Set a hint to the to the underlying history manager as to how many
397 entries there are expected to be in the history database; \fB0\fR
398 indicates that an automatic or default sizing should be made. \fIval\fR
399 should be a pointer to a value of type \fBsize_t\fR and will not be
400 modified by the call.
401 .ie n .IP """HISCTLS_IGNOREOLD"" (bool *)" 4
402 .el .IP "\f(CWHISCTLS_IGNOREOLD\fR (bool *)" 4
403 .IX Item "HISCTLS_IGNOREOLD (bool *)"
404 Instruct the underlying history manager to ignore existing database
405 when creating new ones; typically this option may be set to \fBtrue\fR if
406 the administrator believes that the existing history database is
407 corrupt and that ignoring it may help. \fIval\fR should be a pointer to a
408 value of type \fBbool\fR and will not be modified by the call.
409 .ie n .IP """HISCTLS_STATINTERVAL"" (time_t *)" 4
410 .el .IP "\f(CWHISCTLS_STATINTERVAL\fR (time_t *)" 4
411 .IX Item "HISCTLS_STATINTERVAL (time_t *)"
412 For the history v6 and tagged hash managers, set the interval, in
413 seconds, between \fIstat\fR\|(2)s of the history files checking for replaced
414 files (as happens during expire); this option is typically used by
415 \&\fInnrpd\fR\|(8) like applications. \fIval\fR should be a pointer to a value of
416 type \fBtime_t\fR and will not be modified by the call.
417 .SH "HISTORY"
418 .IX Header "HISTORY"
419 Written by Alex Kiernan <alexk@demon.net> for InterNetNews 2.4.0.
420 .Sp
421 $Id: libinnhist.3 7880 2008-06-16 20:37:13Z iulius $