blob: aa60468f18da2d19767e95a5b834b76a5414ce81 [file] [log] [blame]
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -07001.\" **************************************************************************
2.\" * _ _ ____ _
3.\" * Project ___| | | | _ \| |
4.\" * / __| | | | |_) | |
5.\" * | (__| |_| | _ <| |___
6.\" * \___|\___/|_| \_\_____|
7.\" *
8.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
9.\" *
10.\" * This software is licensed as described in the file COPYING, which
11.\" * you should have received as part of this distribution. The terms
Alex Deymo8f1a2142016-06-28 14:49:26 -070012.\" * are also available at https://curl.haxx.se/docs/copyright.html.
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -070013.\" *
14.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
15.\" * copies of the Software, and permit persons to whom the Software is
16.\" * furnished to do so, under the terms of the COPYING file.
17.\" *
18.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19.\" * KIND, either express or implied.
20.\" *
21.\" **************************************************************************
22.\"
Elliott Hughes1ef06ba2018-05-30 15:43:58 -070023.TH CURLOPT_WRITEFUNCTION 3 "February 03, 2016" "libcurl 7.60.0" "curl_easy_setopt options"
Elliott Hughes82be86d2017-09-20 17:00:17 -070024
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -070025.SH NAME
26CURLOPT_WRITEFUNCTION \- set callback for writing received data
27.SH SYNOPSIS
28.nf
29#include <curl/curl.h>
30
31size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata);
32
33CURLcode curl_easy_setopt(CURL *handle, CURLOPT_WRITEFUNCTION, write_callback);
34.SH DESCRIPTION
35Pass a pointer to your callback function, which should match the prototype
36shown above.
37
38This callback function gets called by libcurl as soon as there is data
39received that needs to be saved. \fIptr\fP points to the delivered data, and
40the size of that data is \fIsize\fP multiplied with \fInmemb\fP.
41
42The callback function will be passed as much data as possible in all invokes,
43but you must not make any assumptions. It may be one byte, it may be
44thousands. The maximum amount of body data that will be passed to the write
45callback is defined in the curl.h header file: \fICURL_MAX_WRITE_SIZE\fP (the
46usual default is 16K). If \fICURLOPT_HEADER(3)\fP is enabled, which makes
47header data get passed to the write callback, you can get up to
48\fICURL_MAX_HTTP_HEADER\fP bytes of header data passed into it. This usually
49means 100K.
50
51This function may be called with zero bytes data if the transferred file is
52empty.
53
54The data passed to this function will not be zero terminated!
55
56Set the \fIuserdata\fP argument with the \fICURLOPT_WRITEDATA(3)\fP option.
57
58Your callback should return the number of bytes actually taken care of. If
59that amount differs from the amount passed to your callback function, it'll
60signal an error condition to the library. This will cause the transfer to get
61aborted and the libcurl function used will return \fICURLE_WRITE_ERROR\fP.
62
63If your callback function returns CURL_WRITEFUNC_PAUSE it will cause this
64transfer to become paused. See \fIcurl_easy_pause(3)\fP for further details.
65
66Set this option to NULL to get the internal default function used instead of
67your callback. The internal default function will write the data to the FILE *
68given with \fICURLOPT_WRITEDATA(3)\fP.
69.SH DEFAULT
70libcurl will use 'fwrite' as a callback by default.
71.SH PROTOCOLS
72For all protocols
73.SH AVAILABILITY
74Support for the CURL_WRITEFUNC_PAUSE return code was added in version 7.18.0.
75.SH RETURN VALUE
76This will return CURLE_OK.
77.SH EXAMPLE
78A common technique is to use this callback to store the incoming data into a
79dynamically growing allocated buffer. Like in the getinmemory example:
Alex Deymo8f1a2142016-06-28 14:49:26 -070080https://curl.haxx.se/libcurl/c/getinmemory.html
Bertrand SIMONNETe6cd7382015-07-01 15:39:44 -070081.SH "SEE ALSO"
82.BR CURLOPT_WRITEDATA "(3), " CURLOPT_READFUNCTION "(3), "