Presently coming from Python to C, I'm trying to figure this out myself. One issue that occurs to me is that someone coming from a higher level language like Python or Ruby might have to re-calibrate what they consider 'small'. Since C itself is a smaller, lower level language, functionality that might be small and simple in say, Python, is probably going to be bigger and more complex in C. There are no lists, tuples, dictionaries, strings or sort functions from a batteries-included standard library in native C. If you want such, well, here's your ints chars and pointers, have fun implementing them yourself. (That's not intended as a slam against C)
As for suggestions, all of the following are guesses because of my own n00b status with C. That said:
The runtime of the higher-level language of your choice. If you already know Python well, looking under the hood and seeing the C code that actually implements all the convenient and useful bits may well be instructive.
Rsync. I was able to get some small understanding of how it worked by browsing the source even though I knew hardly any C at the time.
Postfix. I don't think is a small project, but I have heard it spoken well of from a security standpoint -- in part because it is actually several small programs/modules that specialize in one task. Those individual binaries/modules might be comprehensible on their own.
The Python/C API is pretty straightforward and can be a good intro since you'll see how some of the Python types are represented with the curtains pulled back. Try porting a small module of your own from Python to C. Then refactor it so it can be used in a stand-alone C program with just a few wrappers for the Python API. Then try plugging it into a C program instead.
As for suggestions, all of the following are guesses because of my own n00b status with C. That said:
The runtime of the higher-level language of your choice. If you already know Python well, looking under the hood and seeing the C code that actually implements all the convenient and useful bits may well be instructive.
Rsync. I was able to get some small understanding of how it worked by browsing the source even though I knew hardly any C at the time.
Postfix. I don't think is a small project, but I have heard it spoken well of from a security standpoint -- in part because it is actually several small programs/modules that specialize in one task. Those individual binaries/modules might be comprehensible on their own.