Your program needs to send the file to the user itself. When you click a link you are linking to the program and not to the file, something like:
<a href="/yourprogram.cgi">Click here</a>
The program must spit out the correct headers. One of these should probably be 'content-disposition' so I suggest you poke around based on that.
Be wary of specifiying the file in the link unless you know EXACTLY what you are doing, otherwise this can happen:
<a href="file.cgi?file=../../../etc/passwd">here</a>
Ok thats a contrived example to indicated what I mean but that should indicate the problems you face ;). If you are not careful someone could download any file on your system which is something you definitely wouldn't want :).