linux程序设计2012年期末试卷电子版
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
兰州商学院2011-2012学年第二学期期末考试
Linux程序设计 试卷A
1、单项选择题(每小题1分,共计20分)
1. Linux在确定文件名filename是否代表目录文件时,依据( C )。
A. 由程序员指定 B. filename是否位于/etc目录中
C. 该文件i结点中的类型信息 D. filename中的扩展名
2. 在进程p1中用系统函数execvp执行程序p2,则( D )。
A. p1创建一个子进程执行p2 B. p2结束后返回prog1继续执行
C. p1和p2并行执行 D. p2将替换掉prog1的代码
3. 进程调用wait将被阻塞,直到( D )。
A. 用户按任意键 B. 收到时钟信号 C. 子进程被创建 D. 子进程结束
4. Shell脚本中的注释用( C )标记。
A. // B. /*…*/ C. # D. *
5. head命令用于( B )。
A. 显示文件的前10行 B. 显示C语言头文件
C. 显示目录的前10行 D. 显示
6. bind调用用于( A )。
A. 为socket分配地址 B. 客户端与服务器连接
C. 接收socket上的连接 D. 监听socket上的连接
7. 一个进程收到SIGCHILD信号,表示( c )。
A. 创建子进程成功 B. 创建子进程失败
C. 子进程结束 D. 子进程开始运行
8. 当客户端用GET命令请求某文件时,Web服务器用返回码( B )表示没有该文件。
A. 200 B. 404 C. 8080. ② exit(0)
9. 删除命名管道的系统调用是( A )。
A. unlink B. close C. fcolse D. dup2
10. 设可能有多个线程调用pthread_cond_wait(&buf_empty, &lock)后等待条件变量
buf_empty,当某线程pt1调用pthread_cond_signal(&buf_empty)后,( B )。
A. 所有等待buf_empty的线程被唤醒
B. 有一个等待buf_empty的线程被唤醒
C. 所有等待buf_empty的线程都没有被唤醒
D. 没有线程等待buf_empty时pt1被阻塞
11. ls命令用于( A )。
A. 查看目录的内容 B. 查看文本文件的内容
C. 查看帮助 D. 查看打印机
12. rmdir命令可( B )。
A. 创建子目录 B. 删除子目录
C. 移动子目录 D. 命名子目录
13. cat命令可( c )。
A. 设置捕鼠器 B. 查看子目录内容
C. 查看文本文件内容 D. 查看二进制文件
14. man命令可( D )。
A. 查看编译信息 B. 编译源程序
C. 查看用户信息 D. 查看帮助信息
15. 在Shell中Ctrl+D用于( B )。
A. 输入文件结束符 B. 撤销最近做的操作
C. 输出文件结束符 D. 输出文件名
16. pwd命令可( B )。
A. 查看密码 B. 查看当前目录
C. 查看在线用户 D. 查看终端
17. kill命令的功能是( C )。
A. 停止进程 B. 执行异步IO
C. 向进程发送信号 D. 查看帮助信息
18. stdin表示( C )。
A. 标注错误 B. 标准输出
C. 标准输入 D. 标准打印
19. 在Linux中执行命令时,重定向IO的是( D )。
A. 命令 B. 参数
C. 标准输入 D. Shell
20. cp命令用于( A )。
A. 拷贝文件 B. 查询数据库
C. 网络连接 D. 执行命令
二、判断题(每小题1分,共计10分)
1. open返回的文件描述符的类型为FILE* (>< )
2. 内核缓冲区位于磁盘文件中 ( ><)
3. lseek函数用于在文件中查找字符串 (><)
4. 任何用户不能修改文件类型 ( \/ )
5. 链接(link)是一个指向文件的指针 ( \/ )
6. 软件工具总是针对特殊的终端模式来设计 ( >< )
7. 软件工具总是从标准输入或文件来获取需要处理的数据 ( \/)
8. 所有的信号都可以被忽略 ( >< )
9. fdopen用于打开指定文件名的文件 ( >< )
10. fopen可以打开设备文件但不能打开磁盘文件 ( >< )
三、填空题(每空1分,共计10分)1.(WHO)命令通过读系统日志的内容显示当前已经登录的用户。
2.当系统调用出错时会把全局变量(errno)设为相应的错误代码。
3.Ctrl+C按键可向进程发送(中断)信号。
4.命令$who>usrlist中的>表示(标准输出)重定向。
5.每个进程都有一个唯一的(ID)。
6.运行Linux程序时返回( 0 )表示成功。
7. (文件描述符)为程序提供了与文件、设备和其它进程通信的统一编程接口。
8.Web服务器的请求和应答协议称为(超文本传输协议(http))。
9.Linux程序可以通过( 缓冲)来减少访问磁盘IO的次数。
10.文件描述符2称为(标准错误输出 )。
四、简答题(每小题6分,共计30分)
1. 如何在Linux中获取必要的编程参考信息?
阅读联机帮助;搜索联机帮助;阅读头文件;使用参照信息;
2. 进程如何处理信号?
(1)接受默认处理;(2)忽略信号;(3)调用一个函数;
3. Shell是如何实现输入重定向的?
(1)调用close关闭文件描述符0
(2)调用open打开文件
(3),根据最低可用文件描述原则,新文件描述符为0,
(4)调用exec函数执行命令
(5)命令的标准输出进入文件.
4. 请简要说明什么是搜索路径
Linux里的指令(commands)都是文件,如果直接敲,并被执行,说明该指令在你的搜索路径内,否则会有错误(command not found .......)。 用echo $PATH会显示搜索路径中含有哪些directories。 如:$echo $PATH/sbin:/usr/bin:/usr/openwin/bin:/usr/local/bin此时任何在所列的4个directories里的命令可以直接用;否则须用觉得或相对路径:$/usr/sbin/ifconfig只用ifconfig时会有错误。 一般在home directory的.profile中定义(与所用shell有关)。
5. 请简要说明你选择的是Linux发行版的特点?
FedoraRed Hat分为两个系列:由Red Hat公司提供收费技术支持和更新的Red Hat Enterprise Linux(可用CentOS替代,是RHEL的克隆版,免费),以及由社区开发的免费
的Fedora Core。FC的定位便是桌面用户。FC提供了最新的软件包,同时,它的版本更新周期也非常短,仅六个月。Fedora拥有数量庞大的用户,优秀的社区技 术支持,许多创新。是当前最流行的版本之一,适于新手使用
五、代码分析(10分)
请分析下列脚本实现了什么功能。
who | sort > prev #将who的标准输出连接到sort的标准输入
while true
do
sleep 30#休眠30秒
who | sort > current #获取当前在线用户的信息
echo "Logged out:" #回显
comm -23 prev current #显示prev-current的内容
echo "Logged in:"
comm -13 prev current #显示current-prev的内容
mv current prev #用current替换prev
done
六、设计题。(每小题10分,共计20分)
1、请实现一个文件拷贝程序copy,它运行时带有两个参数,分别表示拷贝的源文件和目标文件。
import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.FileNotFoundException;public class copy { public static void main (String args[]) { if (args.length < 2) { System.out.println("请按以下格式输入:java copy 原路径 目标路径"); return; } try { FileReader reader = new FileReader(args[0]); FileWriter writer = new FileWriter(args[1]); int c = -1; while ((c = reader.read()) != -1) writer.write(c); reader.close(); writer.close(); } catch (FileNotFoundException fnfe) { System.out.println("原文件不存在!"); return; } catch (IOException ioe) { System.out.println("拷贝失败!"); return; } System.out.println("拷贝成功!"); }}
1、请实现一个有两个线程的并行程序。线程一对某全局变量执行加1操作1000次,线程二对同一个全局变量执行减1操作1000次。
public static void main(String[] args) {
IncDecThread incDec=new IncDecThread();
Inc inc=incDec.new Inc();
Dec dec=incDec.new Dec();
for(int i=0;i<2;i++){
Thread thread=new Thread(inc);
thread.start();
thread=new Thread(dec);
thread.start();
}
}
public synchronized void inc(){
j++;
System.out.println(Thread.currentThread().getName()+"-inc:"+j);
}
public synchronized void dec(){
j--;
System.out.println(Thread.currentThread().getName()+"-dec:"+j);
}
class Inc implements Runnable{
public void run(){
for(int i=0;i<20;i++){
inc();
}
}
}
class Dec implements Runnable{
public void run(){
for(int i=0;i<20;i++){
dec();
}
}
}
}