5 ms·
Small C Projects
- burrows 16y agoThese 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 16y ago> 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 16y agoThere 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.
- mahmud 16y agoIt 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/ 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.
- derleth 16y ago> bloat This word, which I see so often, is almost entirely content-free. At most, it conveys a vague sense of 'big is bad'; the association of 'bigness' is the only thing that saves it from being a purely content-free snarl word. http://rationalwiki.org/wiki/Loaded_language#Snarl_words http://rationalwiki.org/wiki/Loaded_language#Snarl_words ("When used as a snarl words, these words are essentially meaningless; most of them can be used with meaning, but rarely are.") To say what ought to be obvious, one person's bloat is another person's essential feature. And, yes, I do use that paragon of GNU software, GNU Emacs, and surely you realize the folly of trying to tell me my editor of choice is bloated.
- mahmud 16y agoBloat is real, and it affects one in five American teenagers, and 100% of GNU code. Bloat can be defined as `cat` being 7 pages in BSD, and 20 in GNU. It's an aesthetic value judgment, made by someone qualified to say .. "do not want": http://www.freebsd.org/cgi/cvsweb.cgi/~checkout~/src/bin/cat/cat.c?rev=1.32.24.1;content-type=text%2Fplain http://www.freebsd.org/cgi/cvsweb.cgi/~checkout~/src/bin/cat... http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/cat.c http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/cat....
- Someone 16y agoSeven? That is at least around 85% bloat. http://minnie.tuhs.org/cgi-bin/utree.pl?file=3BSD/usr/src/cmd/cat.c http://minnie.tuhs.org/cgi-bin/utree.pl?file=3BSD/usr/src/cm... needed only one page. As the poster above said, one man's bloat is another man's essential feature. Back to the subject: reading those old sources really learns you why, back in the seventies, people found Unix so appealing. even ignoring the feature growth/creep (or whatever you want to call it), you do not have to wade through a zillion copyright header lines, option parsing that goes on for ages, locale-specific stuff, etc, before getting to the meat of the program. Disadvantage is that some code dives into assembler fairly quickly (for example, printf is mostly assembly in the system I refer to above)
- 16y ago
- Someone 16y agoFor 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.
- akjj 16y agoIt'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.
- husted 16y agoBuy 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.
- metageek 16y agoAn 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.
- temporarius 16y agoWrite 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 :)
- rdtsc 16y agoOne 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 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/patest_sine.c http://www.portaudio.com/trac/browser/portaudio/trunk/test/p... If you like file systems & linux write a FUSE file system. Or a kernel module: http://lwn.net/Articles/68106/ http://lwn.net/Articles/68106/ If you like graphics you can try libSDL: http://friedspace.com/SDLTest.c http://friedspace.com/SDLTest.c