步。最后别忘了在工具—-帐户里选中此邮箱并且右键属性设置其smtp服务器需要验证,不然会导致发邮件发不出去。
8. 练习FTP服务器的配置过程,学会字符界面下ftp命令连接服务器上下载文件的基本使用方法。
答:以通过ftp命令连接ftp.dlpu.edu.cn为例:先在cmd中输入ftp进入到ftp命令行状态。输入open ftp.dlpu.edu.cn回车连接上服务器,在提示下输入用户名anonymous,密码随便,成功后输入dir查看远程服务器上的文件目录,用cd 目录名称的方式进入到下一级目录,用cd ..回到上一层目录,用pwd查看当前在服务器的那个目录下,用lcd查看本地当前目录和改变本地目录。
9. 查找资料了解什么是LAMP服务器?它的需要哪些程序?
答:Linux+Apache+Mysql+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。随着开源潮流的蓬勃发展,开放源代码的LAMP已经与J2EE和.Net商业软件形成三足鼎立之势,并且该软件开发的项目在软件方面的投资成本较低,因此受到整个IT界的关注。从网站的流量上来说,70%以上的访问流量是LAMP来提供的,LAMP是最强大的网站解决方案。要安装LAMP服务器步骤是要依次安装apache、mysql和PHP。
第6章 习题答案
1.什么是shell?Linux的shell主要有哪几种类型? 答:
Shell是一个用户接口,是一个命令解释器,除此之外,shell命令本身还可以作为程序设计语言,将多个shell命令组合起来,编写能实现系统或用户所需功能的程序。
Shell类型:bash,bsh,csh,tcsh,ksh,ash,zsh
2.如何编辑一个shell脚本、shell脚本的执行方式有哪些? 答:
Vi+shellscriptname
执行方式:(1)为脚本文件加上可执行权限,然后在命令行直接输入shell脚本文件名执行。 (2)sh shell脚本名 (3). shell脚本名 3.shell变量都有哪些? 答:
在shell编程中可以使用四种变量:用户自定义变量、环境变量、位置变量和特殊变量。 4.shell中都有哪些引号,他们之间的区别是什么? 答:
在shell中引号分为三种:单引号,双引号和反引号。
单引号 (?) 由单引号括起来的字符都作为普通字符出现。特殊字符用单引号括起来以后也会失去原有意义,而只作为普通字符解释。
双引号(―)由双引号括起来的字符,除“$”、“\\”、“‘”、和“‖”这几个字符仍是特殊字符并保留其特殊功能外,其余字符作为普通字符对待。
反引号(`)反引号括起来的字符串被shell解释为命令,在执行时,shell首先执行该命令,并以它的标准输出结果取代整个反引号(包括两个反引号)部分。
5.一个shell脚本,内容如下: #!/bin/bash
# finduser----寻找是否有第一个参数指定的用户登录 if [ $# -ne 1 ]
then
echo usage: finduser username >&2 exit 1 fi
who | grep $1 验证该脚本执行结果。 答:
6.一个shell脚本内容如下: echo “enter username: ” read user
until who | grep “$user” > /dev/null do sleep 30 done
验证该脚本执行结果。 答:
7.一个shell脚本,内容如下: #!/bin/bash if [ $# -ne 2 ] then
echo “usage: $0 mdays size ” 1>&2 exit 1 fi
if [ $1 –lt 0 –o $1 –gt 30 ] then
echo “mdays is out of range” exit 2 fi
if [ $2 –le 20 ] then
echo “size is out of range” exit 3 fi
find / -xdev –mtime $1 –size +$2 –print 验证该脚本执行结果。 答:
从根目录开始查找所有$1小时前修改,大小大于$2块的文件。 8.一个shell脚本,内容如下:
echo –n “which color do you like?” read color case “$color” in [Bb]l??)
echo I feel $color echo The sky is $color;; [Gg]ree*)
echo $color is for trees echo $color is for seasick;; red | orange)
echo $color is very warm!;; *)
echo no such color as $color;; esac
echo “out of case” 验证该脚本执行结果。 答:
9.设计一个shell脚本:求命令行上所有整数和。 答: sum=0
while [ $# != 0 ] do
let sum=sum+$1 shift done
echo “the sum of arguments is $sum”
10.设计一个shell脚本:判断当前工作目录下所有的文件类型,如果是目录显示目录名,如果是文件查看文件内容,如果都不是,显示提示信息。
答:
for file in ./* do
if [ -d “$file” ] then
ls “$file”
elif [ -f “file” ] then
more “$file” else
echo “$fiel is not a directory or a regular file.s” done
第7章 习题答案
1.gcc编译过程一般分为哪几个阶段?各阶段的主要工作是什么?
答:gcc编译过程一般分为预处理、编译、汇编、链接四个阶段,各阶段的主要工作如下: (1)预处理阶段
在该阶段,编译器将上述代码中的stdio.h编译进来。GCC首先调用cpp进行预处理,根据以字符#开头的命令修改原始的C程序。如hello.c中#include
但实际工作中通常不用专门生成这种文件,因为基本上用不到。若非要生成这种文件不可,可以利用下面的示例命令。
$gcc -E hello.c -o hello.i (2)编译阶段
GCC调用cc1检查代码的规范性,是否有语法错误等,以确定代码实际要做的工作,在检查无误后,把代码翻译成汇编语言,生成汇编处理后的汇编代码hello.s。这个阶段对应的GCC命令如下所示。 $gcc -S hello.i -o hello.s
汇编语言是非常有用的,它为不同高级语言不同编译器提供了通用的语言。如:C编译器和Fortran编译器产生的输出文件用的都是一样的汇编语言。 (3)汇编阶段
GCC调用as把编译阶段生成的hello.s文件转成编译后的目标文件hello.o,但hello.c中所引用的其他文件中函数(如printf)的内存位置尚未定义。这个阶段对应的GCC命令如下所示: $gcc -c hello.s -o hello.o (4)链接阶段
GCC调用ld将程序的目标文件与所需的所有附加的目标文件连接起来,最终生成可执行文件。如GCC找到hello.c所调用的函数printf函数库所在位置/user/lib,把函数的实现链接进来,生成最终的可执行文件hello。可以利用下面的示例命令完成。 $gcc hello.o -o hello
如果我们不想生成中间的各类型文件,可用如下命令由源文件直接编译链接成可执行文件。
$gcc hello.c -o hello 2.简述GNU gdb的功能。
答:gdb是Linux系统中一个功能强大的GNU调试程序,它可以调试C和C++程序,使程序开发者在程序运行时观察程序的内部结构和内存的使用情况。gdb提供如下功能: (1)运行程序,设置所有的能影响程序运行的参数和环境; (2)控制程序在指定的条件下停止运行; (3)当程序停止时,可以检查程序的状态; (4)修改程序的错误,并重新运行程序; (5)动态监视程序中变量的值;
(6)可以单步逐行执行代码,观察程序的运行状态; (7)分析崩溃程序产生的core文件。 3.用gdb调试下面的程序。 #include
char my_string[] = \ my_print (my_string); my_print2 (my_string); }
my_print (char *string) {
printf (\}
my_print2 (char *string) {
char *string2; int size, i;
size = strlen (string);
string2 = (char *) malloc (size + 1); for (i = 0; i < size; i++) string2[size - i] = string[i]; string2[size+1] = `\\0';
printf (\}
答:gcc -g -o greeting greeting.c
这个程序执行时显示结果: The string is hello there The string printed backward is
输出的第一行是正确的, 但第二行打印出的东西并不是我们所期望的。我们所设想的输出应该是: The string printed backward is ereht olleh。
由于某些原因, my_print2 函数没有正常工作。用gdb 看调试程序, 先键入如下命令: