
Small C Projects - mvid
http://stackoverflow.com/q/4038935/277256
======
mahmud
It really surprises me when people look for "small" programming projects.

Boot a Unix, leave X, sit still for 20 minutes. There.

Get the sources to your Unix and just go read the code for your everyday
utils. This is best done with a BSD, that isn't bloated with GNUisms.

If you don't believe me about GNU bloat, just look here:

<http://www.freebsd.org/cgi/cvsweb.cgi/src/bin/>

Get a BSD and devour the beauty that is Unix, unfuckedwith.

FreeBSD also comes with all the papers & research docs you need; love how the
troff formatting is readable in console with zcat. The CRT radiation kept me
glowing green for many an enjoyable night.

~~~
barrkel
The GNU toolset may have combobulated source, but it's a damn sight more
usable and useful than bare-bones utilities.

~~~
mahmud
But the metric of this thread was "small C projects", not useful, cushy
coreutils.

------
akjj
It's a little different from what the OP was asking for, but my favorite toy
programming project: write a shell. This brings you in contact with many of
the basic aspects of the Unix system: pipes, fork, exec, environment
variables. In around a thousand lines, you can implement a shell with pipes,
backgrounding, backquote, variable expansion, conditionals, looping, and lots
and lots of bugs.

In general, I like the idea of trying to implement absolutely minimal versions
of common programs. Other possibilities are: an HTTP server or proxy, a Lisp
interpreter.

~~~
l0nwlf
To make a Lisp interpreter you need to know Lisp. But I liked the idea of
writing a shell.

~~~
dfox
Writing Lisp interpreter is actually good way to learn most of core Lisp
concepts.

------
husted
Buy an embedded system like the Arduino and learn C while haking a bit of
hardware too. Yes, the Arduino is not 100% ANSI C but I suspect it's close
enough.

For me learning a new programming language is always about finding a problem
to solve, something that will keep me interested and make it fun to learn.

------
rdtsc
One of the good suggestions was exercises from K&R. I also like "Practical C"
by Steve Oualline.

Then the best thing is to just work on something you like.

If you like networking, write an RPC server using the basic Linux socket
interface or use 0mq to write a pub / sub :

<http://www.zeromq.org/intro:read-the-manual>

If you like audio or DSP write a an audio processing program and adds an echo
or other effect to an input audio stream. You can try portaudio interface:

[http://www.portaudio.com/trac/browser/portaudio/trunk/test/p...](http://www.portaudio.com/trac/browser/portaudio/trunk/test/patest_sine.c)

If you like file systems & linux write a FUSE file system. Or a kernel module:

<http://lwn.net/Articles/68106/>

If you like graphics you can try libSDL:

<http://friedspace.com/SDLTest.c>

------
metageek
An XML parser makes a nice medium-sized project; it'll get you experience with
C data structures and string handling. Plus it has the nice property that you
can start small and build on, until you've got the whole spec done, and every
bit along the way is useful.

------
burrows
These questions always seem so ridiculous. There are thousands of examples of
projects that fall into systems programming.

Do one of these things: keyboard/mouse driver, hard drive diagnostics poller,
implement raw sockets on windows, system call hooking pattern, a VM for a
scripting language, a VM/crypter software protection scheme, etc.

There's all kinds of stuff.

~~~
shadowfox
> These questions always seem so ridiculous

Maybe I am misreading this. But I don't quite see why. The poster seemed to
want to relearn C and was asking other people's opinions on what would be
interesting small projects to start out with.

~~~
burrows
There is no reason to ask such a question because potential projects are
outlined in _thousands_ of places across the net. It seems that he put
absolutely no effort into googling and finding such projects on his own.

------
temporarius
Write a Brainfuck interpreter. Seriously, it is trivial to write a simple one,
slightly harder to write a compact one, and then just hack on to optimize it
for speed. There are great test cases too including ASCII Mandelbrot renderer
:)

------
Someone
For the 'more distinct parts of the C language', I would suggest reading a
couple of the obfuscated C contest entries, than writing one of your own.

