Translate code from PERL to C - image files

Posted on 1997-06-03
Last Modified: 2010-04-15
I have the following PERL script that works fine. It sends a
picture to a browser as a response to a
<img src="http://www.***.com/cgi-bin/">
tag with the picture number is passed as shown.

Can you please show me how can one do the same thing using a
CGI script in C that can be compiled. Just in case you need,
here is info about the server:

server software is Apache/1.2b10
Perl version is 5.003
server protocol is HTTP/1.0
Common Gateway Interface (CGI) version is CGI/1.1.

Also, how do I go about compiling?

Thank you for your help.
Sincerely yours,
Laurentiu Traineanu






sub DisplayPicture
    print "Content-type: image/gif\r\n";
    print "\r\n";

Question by:neis
  • 3
  • 3
  • 2

Author Comment

ID: 1250734
Edited text of question

Expert Comment

ID: 1250735
Yes I will code it for you, but that's more worth than 100 points...

Author Comment

ID: 1250736
Ok, how much?
Back Up Your Microsoft Windows Server®

Back up all your Microsoft Windows Server – on-premises, in remote locations, in private and hybrid clouds. Your entire Windows Server will be backed up in one easy step with patented, block-level disk imaging. We achieve RTOs (recovery time objectives) as low as 15 seconds.


Expert Comment

ID: 1250737
250 incl. the source - because you have to compile it on your system. I think it's a UNIX-box (Apache)?!?

Accepted Solution

julio011597 earned 100 total points
ID: 1250738
Sorry for the intrusion, but i think 100 points are enough:)

Here is the code:

/* sendpic.c */

#include <stdlib.h>
#include <stdio.h>

#define PIC_PATH "/usr/local/etc/httpd/cgi-bin"

int main(int argc, char **argv)
  char buff[BUFSIZ];
  FILE *pgif;

  /* look at fread(3): give items_read the type */
  /* returned by fread (size_t on my system) */
  register size_t items_read;

  /* let's print the header */
  fputs("Content-Type: image/gif\n\n", stdout);

  if(argc == 1) {
    /* in C, first argument is the command run */
    /* so, handle no parameter passed: */
    /* maybe show a default picture */
    /* then exit saying: the cgi didn't fail! */
    return EXIT_SUCCESS;

  /* let's put file name in buff */
  sprintf(buff, "%s/%s.gif", PIC_PATH, *(argv+1));

  if(!(pgif = fopen(buff, "r"))) {
    /* gif not found: again, maybe show a default image */
    return EXIT_SUCCESS;

  while(items_read = fread((void *)buff, sizeof(char), BUFSIZ, pgif))
    fwrite((void *)buff, sizeof(char), items_read, stdout);

  return EXIT_SUCCESS;

Compile it with:

$ cc -o sendpic.cgi sendpic.c

Note that in C/Unix you handle binary files with fread() and fwrite() - don't need to specify binary mode.
Also, you needn't unbuffer stdout in this case, because you are sending a self-standing buch of data; also, unbuffering makes things slower.

Rgds, julio

Expert Comment

ID: 1250739
Give him the points, learn C and you will not have to give points away for such easy problems. To julio: I only wanted to clear this section from complete-program-searchers. This is for special C-problems.

Expert Comment

ID: 1250740
Hello beckers,

i may agree with you, this forum is mainly intended for advice, not for ready products.

Anyway, there's not such a strong rule about this, so, to show my position:

i never ask homeworks;
i sometimes give complete programs, because - say - Mr.neis doesn't care about becoming a programmer: he's just 'paying' for some help.

BTW, you would have answered this for 250 points, so what's indeed your point? ;)

Cheers, julio

Author Comment

ID: 1250741
Thank you julio for your help. It is exactly what I was looking for. You are right, I don't care to become a C programmer, I just need to replace the PERL program with a C one.

Featured Post

Does Powershell have you tied up in knots?

Managing Active Directory does not always have to be complicated.  If you are spending more time trying instead of doing, then it's time to look at something else. For nearly 20 years, AD admins around the world have used one tool for day-to-day AD management: Hyena. Discover why

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Preface I don't like visual development tools that are supposed to write a program for me. Even if it is Xcode and I can use Interface Builder. Yes, it is a perfect tool and has helped me a lot, mainly, in the beginning, when my programs were small…
This is a short and sweet, but (hopefully) to the point article. There seems to be some fundamental misunderstanding about the function prototype for the "main" function in C and C++, more specifically what type this function should return. I see so…
The goal of this video is to provide viewers with basic examples to understand how to create, access, and change arrays in the C programming language.
The goal of this video is to provide viewers with basic examples to understand and use conditional statements in the C programming language.

820 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question