---
name: "CURLOPT_WRITEDATA"
section: "3"
platform: "linux"
package: "curl"
version: "8.23.0-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "macos"]
url: "https://new.carta.tech/CURLOPT_WRITEDATA"
---

# CURLOPT\_WRITEDATA(3)

pointer passed to the write callback

## NAME

CURLOPT\_WRITEDATA - pointer passed to the write callback

## SYNOPSIS

```
#include <curl/curl.h>
CURLcode curl_easy_setopt(CURL *handle, CURLOPT_WRITEDATA, void *pointer);
```

## DESCRIPTION

A data *pointer* to pass to the write callback. If you use the *[CURLOPT\_WRITEFUNCTION(3)](/CURLOPT_WRITEFUNCTION/3.md)* option, this is the pointer you get in that callback's fourth and last argument. If you do not use a write callback, you must make *pointer* a 'FILE \*' (cast to 'void \*') as libcurl passes this to *[fwrite(3)](/fwrite/3.md)* when writing data.

The internal *[CURLOPT\_WRITEFUNCTION(3)](/CURLOPT_WRITEFUNCTION/3.md)* writes the data to the FILE \* given with this option, or to stdout if this option has not been set.

If you are using libcurl as a Windows DLL, you must also use *[CURLOPT\_WRITEFUNCTION(3)](/CURLOPT_WRITEFUNCTION/3.md)* if you set this option or you might experience crashes.

## DEFAULT

stdout

## PROTOCOLS

This functionality affects all supported protocols

## EXAMPLE

A common technique is to use the write callback to store the incoming data into a dynamically growing allocated buffer, and then this *[CURLOPT\_WRITEDATA(3)](/CURLOPT_WRITEDATA/3.md)* is used to point to a struct or the buffer to store data in. Like in the *getinmemory* example: https://curl.se/libcurl/c/getinmemory.html

## HISTORY

This option was formerly known as CURLOPT\_FILE, the name *[CURLOPT\_WRITEDATA(3)](/CURLOPT_WRITEDATA/3.md)* was added in 7.9.7.

## AVAILABILITY

Added in curl 7.9.7

## RETURN VALUE

This returns CURLE\_OK.

## SEE ALSO

[**CURLOPT\_HEADERDATA**(3)](/CURLOPT_HEADERDATA/3.md), [**CURLOPT\_READDATA**(3)](/CURLOPT_READDATA/3.md), [**CURLOPT\_WRITEFUNCTION**(3)](/CURLOPT_WRITEFUNCTION/3.md)
