Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::basic_filebuf<CharT,Traits>::setbuf

      From cppreference.com
      <cpp‎ |io‎ |basic filebuf
       
       
       
       
      protected:
      virtualstd::basic_streambuf<CharT, Traits>* setbuf( char_type* s,std::streamsize n)

      Ifs is a null pointer andn is zero, the filebuf becomesunbuffered for output, meaningpbase() andpptr() are null and any output is immediately sent to file.

      Otherwise, a call tosetbuf() replaces the internal buffer (the controlled character sequence) with the user-supplied character array whose first element is pointed to bys and allows thisstd::basic_filebuf object to use up ton bytes in that array for buffering.

      This function is protected virtual, it may only be called throughpubsetbuf() or from member functions of a user-defined class derived fromstd::basic_filebuf.

      Contents

      [edit]Parameters

      s - pointer to the firstCharT in the user-provided buffer or null
      n - the number ofCharT elements in the user-provided buffer or zero

      [edit]Return value

      this

      [edit]Notes

      The conditions when this function may be used and the way in which the provided buffer is used is implementation-defined.

      • GCC 4.6 libstdc++
      setbuf() may only be called when thestd::basic_filebuf is not associated with a file (has no effect otherwise). With a user-provided buffer, reading from file readsn-1 bytes at a time.
      • Clang++3.0 libc++
      setbuf() may be called after opening the file, but before any I/O (may crash otherwise). With a user-provided buffer, reading from file reads largest multiples of 4096 that fit in the buffer.
      • Visual Studio 2010
      setbuf() may be called at any time, even after some I/O took place. Current contents of the buffer, if any, are lost.

      The standard does not define any behavior for this function except thatsetbuf(0,0) called before any I/O has taken place is required to set unbuffered output.

      [edit]Example

      Provides a 10k buffer for reading. On linux, the strace utility may be used to observe the actual number of bytes read.

      Run this code
      #include <fstream>#include <iostream>#include <string> int main(){int cnt=0;std::ifstream file;char buf[10241];     file.rdbuf()->pubsetbuf(buf, sizeof buf);    file.open("/usr/share/dict/words"); for(std::string line; getline(file, line);)++cnt;std::cout<< cnt<<'\n';}

      Possible output:

      356010

      [edit]Defect reports

      The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

      DRApplied toBehavior as publishedCorrect behavior
      LWG 173C++98the type ofn was misspecified asintcorrected tostd::streamsize

      [edit]See also

      invokessetbuf()
      (public member function ofstd::basic_streambuf<CharT,Traits>)[edit]
      sets the buffer and its size for a file stream
      (function)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/io/basic_filebuf/setbuf&oldid=159795"

      [8]ページ先頭

      ©2009-2025 Movatter.jp