Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Translate code from PERL to C - image files

Posted on 1997-06-03
8
Medium Priority
?
315 Views
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/sendpic.pl?pic_no">
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

------------------------------------------------
#!/usr/bin/perl

$pic_path='/usr/local/etc/httpd/cgi-bin/';

  $picno=$ARGV[0];
  $pic=$picno.".gif";

&DisplayPicture;

exit;

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

    open(GIF,"$pic_path$pic");
        select(GIF);$|=1;binmode(GIF);
        select(STDOUT);$|=1;binmode(STDOUT);
        while(<GIF>){
           print;
        }
    close(GIF);
}
------------------------------------------------
0
Comment
Question by:neis
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
  • 2
8 Comments
 
LVL 1

Author Comment

by:neis
ID: 1250734
Edited text of question
0
 

Expert Comment

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

Author Comment

by:neis
ID: 1250736
Ok, how much?
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Expert Comment

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

Accepted Solution

by:
julio011597 earned 400 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);

  fclose(pgif);
  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
0
 

Expert Comment

by:beckers012097
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.
0
 
LVL 5

Expert Comment

by:julio011597
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
0
 
LVL 1

Author Comment

by:neis
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.
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

Have you thought about creating an iPhone application (app), but didn't even know where to get started? Here's how: ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Important pre-programming comments: I’ve never tri…
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…
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use nested-loops 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.
Suggested Courses

660 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