Hi, spc (Hope this helps) ----- > Great !!!!
The external program's (in C) working !!!!! Wonderfull !!! Thank you very much to Brian, Eric and Sean Ricardo On Wed, Apr 29, 2009 at 4:17 PM, Sean Conner <s...@conman.org> wrote: > It was thus said that the Great Brian Mearns once stated: > > On Wed, Apr 29, 2009 at 1:58 PM, ricardo figueiredo > > <ricardoogra...@gmail.com> wrote: > > > Sorry, > > > > > > Let me explain my situation again. > > > I'm using directive RewriteMap using external rewriting program. > > > This program is developed in language C. > > > > > First of all, like Eric said yesterday, you need a loop in your main > > function. The program is not invoked every time the rewrite needs to > > be applied, it is started once when the Apache server starts, and just > > gets a new line of input for each request to be mapped. > > > > Second, you need to terminate your output with a newline. Apparently, > > apache gave up waiting for your program to give it a valid output (one > > that is terminated by a newline) and decided to go with an empty > > value, instead. Using fflush is probably a good idea, but you'll want > > to make sure it's inside the loop, so the output gets flushed for > > every mapping. > > > > To make this a proper program for this use, it should read an entire > > line up to and including the linebreak (which Eric also said). I think > > gets or fgets will do the job just fine, and then if you want to use > > scanf, you can use sscanf to scan the string that you read with fgets. > > Second, you'll want some way to terminate the loop, so it doesn't run > > forever. I'm not sure exactly how this is normally handled (or maybe > > apache even forcibly kills the program when it's done, but that's > > unlikely). My best guess would be if you read an EOF on standard > > input, you can quit. > > Avoid gets() and use fgets(). Heck, the program is easy enough: > > #include <stdio.h> > #include <stdlib.h> > > int main(int argc,char *argv[]) > { > char input[BUFSIZ]; > int id; > > while(fgets(input,BUFSIZ,stdin) != NULL) > { > id = strtol(input,NULL,10); > switch(id) > { > case 111: fputs("/index.html",stdout); break; > case 222: fputs("/new.html",stdout); break; > case 333: fputs("/tests.php?var=4/8"); break; > default: fputs("/bogusrequest.html"); break; > } > fputc('\n',stdout); > fflush(stdout); > } > return EXIT_SUCCESS; > } > > fgets() returns NULL on EOF, strtol() will do the conversion for you (I > find > it easier to use than scanf() but that's me) and I even added a case for an > unexpected value. > > -spc (Hope this helps) > > > --------------------------------------------------------------------- > The official User-To-User support forum of the Apache HTTP Server Project. > See <URL:http://httpd.apache.org/userslist.html> for more info. > To unsubscribe, e-mail: users-unsubscr...@httpd.apache.org > " from the digest: users-digest-unsubscr...@httpd.apache.org > For additional commands, e-mail: users-h...@httpd.apache.org > > -- Muito Obrigado Ricardo