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]."\n";
($list[1], $list[3]) = funky(@list);
print
"M2: ".$list[0]." ".$list[1]." ".$list[2]." ".$list[3]."\n";
## End of main
program
sub funky {
my($v1, $v2, $v3) = @_;
print "F1: "." ".$v1."
".$v2." ".$v3.
" ".$_[0]." ".$_[1]." ".$_[2]."
".$_[3]."\n";
$_[0]++;
print "F2: "." ".$v1." ".$v2." ".$v3.
"
".$_[0]." ".$_[1]." ".$_[2]." ".$_[3]."\n";
$v3 = "Bill";
print "F3: "."
".$v1." ".$v2." ".$v3.
" ".$_[0]." ".$_[1]." ".$_[2]."
".$_[3]."\n";
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\n\n";
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.

C语言cgi(1)的更多相关文章

  1. 搭建简易的c语言与python语言CGI和Apache服务器的开发环境

    搭建简易的c语言CGI和Apache服务器的开发环境 http://www.cnblogs.com/tt-0411/archive/2011/11/21/2257203.html python配置ap ...

  2. 基于windows IIS的C语言CGI WEB服务器环境搭建

    网页编程对我来说特别亲切,因为我就是从html.ASP.PHP一步步接触编程的.自己的编程爱好也是从那里一点一点被满足.不过离开大学之后很久没有碰过WEB了,最近看到嵌入式中的涉及到的web服务器,了 ...

  3. C语言 cgi(3)

    1cs3157 – Advanced ProgrammingSummer 2014, Project 1, 150 pointsJune 17, 2014Follow these step-by-st ...

  4. C语言 cgi(2)

    1Columbia Universitycs3157 – Advanced ProgrammingSummer 2014, Lab #3, 40 pointsJune 10, 2014This lab ...

  5. c语言cgi笔记

    直接输出接收的数据 #include <stdio.h>#include <stdlib.h>main(){int i,n;printf ("Content-type ...

  6. 几种语言的CGI编程

    为了了解PHP.JSP.ASP出现之前人们写网站的方法,洒家研究了一波CGI,使用C.Python.batch.shell script语言写了几个简单的网页. CGI即通用网关接口,指web服务器调 ...

  7. CGI(通用网关接口)

    公共网关接口 CGI(Common Gateway Interface) 是WWW技术中最重要的技术之一,有着不可替代的重要地位.CGI是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在C ...

  8. cgic 写CGI程序

    CGIC是C语言CGI库函数,用于编写CGI程序 CGIC 主要完成以下功能: * 对数据进行语法分析 * 接收以 GET 和 PSOT 两种方式发送的数据 * 把 FORM 中的不同域连接成连续的串 ...

  9. libctemplate——C语言模块引擎简介及使用

    前言 由先声明此libctemplate不是Google那个ctemplate.这个库是用C语言实现的,只有一个实现文件和一个头文件.Gooogl的ctemplate是C++实现的,和线程还扯上了关系 ...

随机推荐

  1. 与众不同 windows phone (10) - Push Notification(推送通知)之推送 Tile 通知, 推送自定义信息

    原文:与众不同 windows phone (10) - Push Notification(推送通知)之推送 Tile 通知, 推送自定义信息 [索引页][源码下载] 与众不同 windows ph ...

  2. VirtualBox集群建立和网络配置

    安装 1. 安装 安装Oracle VM VirtualBox之后,新建一个虚拟机,制定好内存等信息,开始安装操作系统,这里安装ubuntu-12.04.2-desktop-i386版本. 2. 拷贝 ...

  3. boost 的函数式编程库 Phoenix入门学习

    这篇文章是我学习boost phoenix的总结. 序言 Phoenix是一个C++的函数式编程(function programming)库.Phoenix的函数式编程是构建在函数对象上的.因此,了 ...

  4. Zxing中文乱码解决方法

    Zxing中文乱码解决方法总结 尝试过非常多方法  最后发现此方法解决的乱码最多....... 在百度搜索二维码图片 经过前2页的測试  除开一张图之外  其余都能扫描出结果 假设大家有更好的解决方法 ...

  5. Missile:双状态DP

    题目 描写叙述 Long , long ago ,country A invented a missile system to destroy the missiles from their enem ...

  6. Java 开源博客——B3log Solo 0.6.1 正式版发布了!

    Java 开源博客 —— B3LOG Solo 0.6.1 正式版发布了!欢迎大家下载. 该版本主要是改善细节体验,并加入了一款 Metro 风格的皮肤. 特性 基于标签的文章分类 Ping Goog ...

  7. php 简易验证码(GD库)

    论坛中为了防止灌水,出现了非常多的验证码的插件.如今这里介绍一个非常easy的自己定义验证码函数,这个验证码实现的原理就是通过php扩展的gd库来实现的. 给出百度百科对验证码的定义"验证码 ...

  8. android 在特殊应用的特殊功能,以帮助通信系统的问题

    在实际工程中的应用,进入一个特殊的应用后,系统的某个功能不能起作用. 当然,这个通信有非常多办法能够做到.笔者能够想到的至少有例如以下几种 1.利用property熟悉来实现,这种话须要添加一个特殊的 ...

  9. 初步C++运算符重载学习笔记&lt;3&gt; 增量递减运算符重载

    初步C++运算符重载学习笔记<1> 初探C++运算符重载学习笔记<2> 重载为友元函数     增量.减量运算符++(--)分别有两种形式:前自增++i(自减--i).后自增i ...

  10. adm下载器

    netdisk;5.2.7;PC;PC-Windows;6.2.9200;WindowsBaiduYunGuanJia