std::basic_streambuf<CharT,Traits>::sputn, std::basic_streambuf<CharT,Traits>::xsputn

  1. Calls xsputn(s, count) of the most derived class.

# Declarations

std::streamsize sputn( const char_type* s, std::streamsize count );
protected:
virtual std::streamsize xsputn( const char_type* s, std::streamsize count );

# Return value

The number of characters successfully written.

# Notes

“achieved by other means” permits bulk I/O without intermediate buffering: that is how std::ofstream::write() simply passes the pointer to the suitable system call in some implementations.

# Example

#include <iostream>
#include <sstream>
 
int main()
{
    std::ostringstream s1;
    std::streamsize sz = s1.rdbuf()->sputn("This is a test", 14);
    s1 << '\n';
    std::cout << "The call to sputn() returned " << sz << '\n'
              << "The output sequence contains " << s1.str();
 
    std::istringstream s2;
    sz = s2.rdbuf()->sputn("This is a test", 14);
    std::cout << "The call to sputn() on an input stream returned " << sz << '\n';
}

# Defect reports

DRApplied toBehavior as publishedCorrect behavior
LWG 565C++98xsputn() always called overflow() if pptr() == epptr()it does not actually need to be called

# See also