title: What is the role of libc(glibc) in our linux app?
body: <p>When we debug a program using <code>gdb</code>, we usually see functions with strange names defined in <code>libc</code>(<code>glibc</code>?). My questions are:</p>
  
  <ol>
  <li>Is <code>libc/glibc</code> the standard implementation of some standard C/C++ functions like <code>strcpy</code>,<code>strlen</code>,<code>malloc</code>?</li>
  <li>Or, is it not only of the first usage as described above, but also an wrapper of Unix/Linux system calls like <code>open</code>,<code>close</code>,<code>fctl</code>? If so, why can't we issue syscalls directly, without <code>libc</code>?</li>
  <li>Does <code>libc</code> only consist of one lib (<code>.a</code> or <code>.so</code>) file, or many lib files (in this case, <code>libc</code> is the general name of this set of libs)? Where do these lib file(s) reside?</li>
  <li>What is the difference between <code>libc</code> and <code>glibc</code>?</li>
  </ol>