title: What is the rationale for fread/fwrite taking size and count as arguments?
body: <p>We had a discussion here at work regarding why <em>fread()</em> and <em>fwrite()</em> take a size per member and count and return the number of members read/written rather than just taking a buffer and size. The only use for it we could come up with is if you want to read/write an array of structures which aren't evenly divisible by the platform alignment and hence have been padded but that can't be so common as to warrant this choice in design.</p>
  <p>From <a href="https://man7.org/linux/man-pages/man3/fread.3.html" rel="noreferrer">fread(3)</a>:</p>
  <blockquote>
  <p>The function fread() reads nmemb elements of data, each size bytes long,
  from the stream pointed to by stream, storing them at the location given
  by ptr.</p>
  </blockquote>
  <blockquote>
  <p>The  function  fwrite()  writes  nmemb elements of data, each size bytes
  long, to the stream pointed to by stream, obtaining them from the location
  given by ptr.</p>
  </blockquote>
  <blockquote>
  <p>fread() and fwrite() return the number of items successfully read or written
  (i.e., not the number of characters).  If an error occurs, or  the
  end-of-file is reached, the return value is a short item count (or zero).</p>
  </blockquote>