zoukankan      html  css  js  c++  java
  • C语言cgi(1)

    1
    Columbia University
    cs3157 – Advanced Programming
    Summer 2014, Lab #2, 60ish points
    June 9, 2014
    Follow these step-by-step instructions. This lab must be submitted electronically by Monday June
    16th, 11:55 pm.
    The point of the labs is to teach and reinforce specific programming concepts, cut time off your
    homework assignment while trying to maintain your interest. If you find them tedious or pointless, please
    don’t hesitate to bring it to your instructor’s attention (the same applies the opposite).
    Step 1. Visual Editor and Debugging (5 points)
    A debugger is a program that allows you (the programmer) to step through an executing program (i.e live,
    real time) and track internal information and monitor progress. This allows you to monitor logical
    progress and also track down errors.
    Perldoc perldebug
    Will give you more information about the debugging environment. Executing the perl command with the
    -d flag will start perl in debugging mode. Try it….take one of the scripts from lab1 and execute it
    perl -d something.pl
    (h gives you help, q to quit, v shows you some code around you, etc).
    The nice part about eclipse is the ability of running the debugger in a visual environment, so that you
    don’t need to memorize random key commands. (That is a good thing and bad). You have a choice if you
    want to run it from the command line or visual environment. Be aware that certain specific versions of
    eclipse (older) and certain versions of EPIC (older) have issues with the debug system, which causes it to
    work every other time J
    Write up a paragraph or two about your experience in running the debugging environment on one of the
    lab scripts from last lab and over the lab 2 assignments. Answer the following questions after you are
    done with the lab:
    1) After using the debugger, did your code work become easier or harder ?
    2) Any issues with the perl debugger in the clic lab ?
    3) After using it to watch a variable what can you say about perl variable scope ?
    4) What is the difference between stepping over and stepping through in regards to subs ?
    5) How does the average rainfall in the Sahara affect Perl development ?
    Step 2 (20 points)
    Create a perl file called step2.pl. I am providing a file called “testip” to be used as a test file.
    2
    Background information: Computer on the internet are identified using a few standard conventions.
    One of them are IP address. The format for IP version 4, is 4 sets of numbers between 0-255. So your own
    machine might be 128.59.18.1 etc
    1) Given a specific file (passed as a command line argument (important) ) which contains among
    other things, IP addresses, I would like you to locate and count
    any IP address in the file. For example the ip address 255.234.255.1 (4 numbers separated by a
    period).
    NOTE: you need to make sure none of the numbers are not larger than 255
    2) I would also like a printout of all the IP addresses, and the number of times it was seen in the file.
    Addresses can appear multiple times on a line…keep that in mind.
    3) I would like to know how much time has passed from the beginning and end of the program run,
    we would like to see how much time it took to analyze. Lookup localtime command to see how to
    grab the current time.
    You will need to loop through the file, find the ip address (use the regular expressions covered in class on
    Monday), and then keep a count of number of each one seen. Once done, you can print them out in sorted
    order in the following format:
    Processed file YYYYY
    Number of unique IP: 3
    123.123.123.123 9
    12.12.112.2 7
    23.125.123.256 2
    ..
    File analyzed in: 1 minute and 23 seconds
    Step 3: (4 points)
    Consider the following Perl program:
    #!/usr/bin/perl
    use strict;
    my(@list) = (5, "Todd", 3, 2);
    $list[2] += 4;
    print "M1: ".$list[0]." ".$list[1]." ".$list[2]." ".$list[3]." ";
    ($list[1], $list[3]) = funky(@list);
    print "M2: ".$list[0]." ".$list[1]." ".$list[2]." ".$list[3]." ";
    ## End of main program
    sub funky {
    my($v1, $v2, $v3) = @_;
    print "F1: "." ".$v1." ".$v2." ".$v3.
    " ".$_[0]." ".$_[1]." ".$_[2]." ".$_[3]." ";
    $_[0]++;
    print "F2: "." ".$v1." ".$v2." ".$v3.
    " ".$_[0]." ".$_[1]." ".$_[2]." ".$_[3]." ";
    $v3 = "Bill";
    print "F3: "." ".$v1." ".$v2." ".$v3.
    " ".$_[0]." ".$_[1]." ".$_[2]." ".$_[3]." ";
    3
    return($v3, $v2);
    } ## Of function FUNKY
    What did you expect the output to look like and what did it actually look like ? Explain (based on what
    we covered in class) what is going on…
    Step 4 New Process monitor (20 points)
    As demo-ed in class, you will write a simple process monitor. You will use the output of the (ps –aux)
    command to pick out all the running pid->program names every 5 seconds. You will run your program for
    10 minutes printing out when a program starts, or stops.
    As we discussed you will need to run the ps command and then create a map list of the current running
    pid and process names. You will compare current to last map (so if its at 10 seconds, you need to look
    back at 5 seconds) for any processes (pid) which are new to say process is new. Use the old one to look at
    the new one to detect dead process id.
    Most of the code was demo-ed in class, type it up and add comments.
    Step 5: Moving information over CGI Intro (4 points)
    We started to talk about CGI in the last class. Forms are simple ways of feeding information to the user
    and having them interact with your script in some way.
    Here is your chance to start to play around with it. Create a HTML page (feel free to use eclipse or your
    favorite text editor) (step5.html) should have the following code in it:
    <html><head><title>Step2 webpage</title></head>
    <body>
    <form action=”step5a.pl.cgi” method=POST>
    Enter something:
    <input type=”text” name=”t1”>
    <input type=”submit” value=”testpost”></form>
    <HR>
    <form action=”step5b.pl.cgi” method=GET>
    Enter Some text:
    <input type=”text” name=”t2”>
    <input type=”submit” value=”testget”></form>
    </body>
    </html>
    step5a.pl.cgi and step5b.pl.cgi should look like:
    use strict;
    4
    my $time = localtime;
    print "Content-type: text/html ";
    print <<END_OF_PRINTING;
    This is the time : $time
    END_OF_PRINTING
    foreach my $vars (sort keys %ENV){
    print "<b>$vars</b>=";
    print "$ENV{$vars}<BR>";
    }
    Describe in a short paragraph what you see is the difference between get and post when running the
    cgi script. Do a quick search and read up on get and post in a general sense. Which do you think is a better
    way to work with ??
    Note: the webserver has perl in /usr/bin/perl
    Step 6: More CGI and more basic practice (5 points):
    Copy and adopt the previous html file to a new file called Step6.html. Have it call step6a.pl.cgi and
    step6b.pl.cgi . In both cases you need to process and display the input passed in, as a simple html page
    saying
    I was given Key = …. With a value of = …
    (for both input types).
    Hint: This means you need to parse out the arguments passed in. remember to first split around the & sign
    and then around the equal sign. Example:
    my ($pairs,$key,value);
    foreach $pairs (split /&/ $inputstring){
    #now cut the $pairs around the equal sign …..
    Hint2: one of the methods passes user input through ENV and one passes it through STDIN, but you still
    ENV for the length (see read method in perl)
    HINT3: the scripts are basically the same, get one to work and then copy and convert it for the other task.

  • 相关阅读:
    5555
    3333
    4444
    试验2
    Android之TextView灵活使用(转载)
    Android之使用Android-query框架进行开发(一)(转载)
    Android 之Html的解析(使用jsoup)
    Android之动画的学习(转载)
    Android之官方下拉刷新控件SwipeRefreshLayout
    Android之sqlite的使用 (转载)
  • 原文地址:https://www.cnblogs.com/oversea201405/p/3889346.html
Copyright © 2011-2022 走看看