Helix Core is now P4. Product user interfaces will be updated soon. Learn more >>

C/C++ API Documentation | 2026.1

# ClientUser::InputData( StrBuf *, Error * )

Provide data from `stdin` to `p4 < command> -i`.

Virtual? | Yes |
Class | `ClientUser` |
Arguments | `StrBuf *strbuf` | the `StrBuf` which is to hold the data
| `Error *e` | an `Error` object
Returns | `void` |

## Notes

Any command that edits a specification can take the -i option; this method supplies the data for the specification. In the default implementation, the data comes from `stdin`, but an alternate implementation can accept the data from any source. This method is the only way to send a specification to the server without first putting it into a local file.

## Example

The default implementation is called during a normal invocation of `p4 client -i`.

`p4 client -i < clispec.txt`

In this example, `clispec.txt` is fed to the command as `stdin`. Its contents are appended to the `StrBuf` that is given as an argument to `InputData()`, and this `StrBuf` is given to the server after `InputData()` returns.

To read the data from a different source, create a subclass of `ClientUser` with an alternate implementation of `InputData()`.

For example, suppose that you want to be able to edit a client specification without creating a local temp file. You’ve already written a function which generates the new client specification and stores it as a `StrBuf` variable in your `ClientUser` subclass. To send your modified client specification to the server when running `p4 client -i` with your modified `ClientUser`, implement `InputData()` to read data from that `StrBuf`.

The example below assumes that the subclass `MyClientUser` has a variable called `mySpec` that already contains the valid client specification before running `p4 client -i`.

    void MyClientUser::InputData( StrBuf *buf, Error *e )
    {
        buf->Set( mySpec );
    }

Your search for returned results