大家跟着我学习了 c语言,可以做一下下面的测试题来检验一下最近的学习成果吧。
- 选择题(40分)
1. 如果键盘输入为abcdef,程序如下所示,打印结果应该是( C)
char buffer[6];
……
fgets(buffer, 6, stdin);
printf(“%s”, buffer);
[A] abcde [B] abcdef [C] abcdef 后出现乱码 [D] 段错误
2. fread()返回值的含义是 ( A )
[A] 读取的字节数 [B] 读取的对象数 [C] 缓冲区的首地址 [D] 随机数
3. 如果umask的值为022,创建文件时指定的权限是775,则该文件的实际权限为 (755 )
[A] 755 [B] 722 [C] 753 [D] 022
4. 用open( )创建新文件时,若该文件存在则可以返回错误信息的参数是 ( B )
[A] O_CREAT [B] O_EXCL [C] O_TRUNC [D] O_NOCTTY
5. 下列哪个函数不会改变文件读写位置( C )
[A] fread [B] fwrite [C] rewind [D] ftell
- 下面的程序打印多少个“*” ( B )
#include <unistd.h>
#include <stdio.h>
int main()
{
for(int i=0;i<2;i++)
{
Fork();
Printf(“*”);
}
return 0;
}
- 4个 [B]6个 [C] 8个 [D]9个
7.在网络字节序中,所谓”小端”(little endian)说法正确的是(A )
A. 高字节数据存放在低地址处,低字节数据存放在高地址处
B. 低字节位数据存放在内存低地址处, 高字节位数据存放在内存高地址处
C. 和编译器相关
D. 上述答案都不正确
8.TCP使用( B)进行流量控制。
A. 3次握手法 B. 窗口控制机制
C. 自动重发机制 D. 端口机制
9.TCP/IP层IP协议的服务是( A )
A. 可靠服务 B. 有确认的服务
C. 无连接数据报 D. 以上都不对
10.对于一个没有设置任何套接口选项的阻塞套接口,调用recv接收对方的数据,对方发送数据前突然断电,下列哪种情况将会发生( A )
A. recv永远不会返回 B. recv立刻返回-1
C. recv立刻返回0 D. recv在等待很长一段时间后返回-1
11.下列哪些关于套接口选项函数的说法是正确的( B )
A. SO_DONTLINGER选项是让TCP套接口不对数据进行缓存,调用send函数后立刻将数据发送出去;
B.调用SO_RCVBUF和SO_SNDBUF调整发送和接收的字节数;
C. SO_REUSEADDR选项允许套接口绑定在一个已经在使用的地址上;
D. SO_BROADCAST选项,希望该socket发送的数据具有广播特性;
12.下列不是用户进程的组成部分的是( C )
[A] 正文段 [B] 用户数据段 [C] 系统数据段 [D] elf段
13. 以下哪种不是进程的类型 ( B )
[A] 批处理进程 [B] 管理进程 [C] 交互进程 [D] 守护进程
- Linux系统中“一切皆文件”,linux系统中文件的类型有哪些?(B)
[A]文本文件、目录文件、字符设备文件、块设备文件、管道文件、链接文件、套接字文件
[B]普通文件、目录文件、字符设备文件、块设备文件、管道文件、链接文件、套接字文件
[C]文本文件、目录文件、字符设备文件、块设备文件、二进制文件、链接文件、套接字文件
[D]普通文件、目录文件、字符设备文件、块设备文件、管道文件、链接文件、网络文件
15. 以下哪种用法可以等待接收进程号为pid的子进程的退出状态 ( A )
[A] waitpid(pid, &status, 0) [B] waitpid(pid, &status, WNOHANG)
[C] waitpid(-1, &status, 0) [D] waitpid(-1, &status, WNOHANG)
16. 下列对无名管道描述错误的是 ( C )
[A] 半双工的通信模式,通常当单工使用
[B] 有固定的读端和写端
[C] 可以使用lseek函数
[D] 只存在于内存中
17. 下列不属于用户进程对信号的响应方式的是 ( D )
[A] 忽略信号 [B] 保存信号 [C] 捕捉信号 [D] 按缺省方式处理
18. 不能被用户进程屏蔽的信号是 ( B )
[A] SIGINT [B] SIGSTOP [C] SIGQUIT [D] SIGILL
19 下列不属于IPC对象的是 ( D )
[A] 管道 [B] 共享内存 [C] 消息队列 [D] 信号灯
20. 下列哪种机制只能用于线程之间的同步 ( D )
[A] 信号 [B] IPC信号灯
[C] POSIX有名信号量 [D] POSIX无名信号量
- 判断题(10分)
- open()可以用于创建普通文件和设备文件 ( F )
- fgetc()的返回值是char型(F )
- 文件描述符是系统随机分配的非负整数 ( F )
- 某些库函数的实现不需要系统调用 ( FT)
- C类IP地址的范围是127.0.0.1~223.255.255.254 ( F )
- 每个进程的进程号和父进程号在进程执行期间不会改变 ( F )
- 子进程被创建后从fork()的下一条语句开始执行 ( T )
- IP地址是唯一标识一台主机的符号(F)
- wait函数无法接收子进程退出的状态 ( F )
- 孤儿进程一种非正常进程,应该避免该进程的产生 ( T )
- 简答题(45分,每题3分)
-
- 文件IO和标准IO有什么区别?
- 文件I/O 又称为低级磁盘I/O,遵循POSIX相关标准。任何兼容POSIX标准的操作系统上都支持文件I/O。标准I/O被称为高级磁盘I/O,遵循ANSI C相关标准。只要开发环境中有标准I/O库,标准I/O就可以使用。(Linux 中使用的是GLIBC,它是标准C库的超集。不仅包含ANSI C中定义的函数,还包括POSIX标准中定义的函数。因此,Linux 下既可以使用标准I/O,也可以使用文件I/O)。
(2) 通过文件I/O读写文件时,每次操作都会执行相关系统调用。这样处理的好处是直接读写实际文件,坏处是频繁的系统调用会增加系统开销,标准I/O可以看成是在文件I/O的基础上封装了缓冲机制。先读写缓冲区,必要时再访问实际文件,从而减少了系统调用的次数。
(3)文件I/O中用文件描述符表现一个打开的文件,可以访问不同类型的文件如普通文件、设备文件和管道文件等。而标准I/O中用FILE(流)表示一个打开的文件,通常只用来访问普通文件。
-
- 请描述进程和程序的区别?
进程是程序的一次动态执行过程,程序是静态的,进程是动态的。程序是一段代码指令的有序集合。
-
- 指出静态库和共享库的区别(使用方法,对程序的影响)
根据链接的时间不同分为共享库与静态库。共享库又叫动态库。静态库,编译时链接。动态库运行时链接。静态库体积较大,动态库体积较小。
-
- 进程和线程的区别?
- 进程是执行的一段程序,执行中的每一个任务为一个线程。
- 一个线程只属于一个进程,一个进程可以有多个线程。
- 进程与线程共享一块内存空间
- 进程开销大,线程开销小。
- fork和vfork的区别?
1. fork ():子进程拷贝父进程的数据段,代码段
vfork ( ):子进程与父进程共享数据段
2. fork ()父子进程的执行次序不确定
vfork 保证子进程先运行,在调用exec 或exit 之前与父进程数据是共享的,在它调 用exec
或exit 之后父进程才可能被调度运行。
3. vfork ()保证子进程先运行,在她调用exec 或exit 之后父进程才可能被调度运 行。如果在
调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。
————————————————
-
- 进程间的通信方式比较?
-
- TCP和UDP的区别?
TCP 是面向连接的,UDP 是面向无连接的
UDP程序结构较简单
TCP 是面向字节流的,UDP 是基于数据报的
TCP 保证数据正确性,UDP 可能丢包
TCP 保证数据顺序,UDP 不保证
-
- 简述TCP三次握手和四次挥手的过程
三次握手,服务器处于监听状态,客户端向服务器发送链接请求(ACK),服务器收到消息,返回ACK,并回复skn 确定。客户端收到服务器的返回信息,处于send状态。
四次挥手,客户端发送断开请求,服务器收到并确认,服务器回复确认断开,客户端收到后并确认断开。
-
- 简述TCP/IP四层模型,并且举出每层常用的协议(每层最少一种协议)
1.数据链路层:
数据链路层是物理传输通道,可使用多种传输介质传输,可建立在任何物理传输网上。比如光纤、双绞线等
2.网络层:其主要功能是要完成网络中主机间“分组”(Packet)的传输。
含有4个协议:
(1)网际协议IP
负责分组数据的传输,各个IP数据之间是相互独立的。
(2)互联网控制报文协议ICMP
IP层内特殊的报文机制,起控制作用,能发送报告差错或提供有关意外情况的信息。因为ICMP的数据报通过IP送出因此功能上属于网络的第3层。
(3)地址转换协议ARP
为了让差错或意外情况的信息能在物理网上传送到目的地,必须知道彼此的物理地址,这样就存在把互联网地址(是32位的IP地址来标识,是一种逻辑地址)转换为物理地址的要求,这就需要在网络层上有一组服务(协议)能将IP地址转换为相应的网络地址,这组协议就是APP.(可以把互联网地址看成是外识别地址和物理地址看成是内识别地址)
(4)反向地址转换协议RARP
RARP用于特殊情况,当只有自己的物理地址没有IP地址时,可通过RARP获得IP地址,如果遇到断电或重启状态下,开机后还必需再使用RARP重新获取IP地址。广泛用于获取 无盘工作站的IP地址。
3.传输层:其主要任务是向上一层提供可靠的端到端(End-to-End)服务,确保“报文”无差错、有序、不丢失、无重复地传输。它向高层屏蔽了下层数据通信的细节,是计算机通信体系结构中最关键的一层。包含以下2个重要协议:
(1)TCP :
TCP是TCP/IP体系中的传输层协议处于第4层传输层,负责数据的可靠传输(“三次握手”-建立连接、数据传送、关闭连接)。
(2)UDP:
和TCP相比,数据传输的可靠性低,适合少量的可靠性要求不高的数据传输。
4.应用层:应用层确定进程间通信的性质,以满足用户的需要。
在应用层提供了多个常用协议。
--Telnet(Remote Login):远程登录
FTP(File Transfer Protocol):文件传输协议
SMTP(Simple Mail Transfer Protocol):简单邮件传输协议
POP3(Post Office Protocol 3):第三代邮局协议
HTTP(Hyper Text Transfer Protocol):超文本传输协议
NNTP(Network News Transfer Protocol):网络新闻传输协议
-
- 程序代码如下,请按执行顺序写出输出结果
int main()
{ pid_t pid1,pid2;
if((pid1=fork()) = = 0)
{
sleep(3);
printf(“info1 from child process_1\n”);
exit(0);
printf(“info2 from child process_1\n”);
}
else
{
if((pid2=fork()) = = 0)
{
sleep(1);
printf(“info1 from child process_2\n”);
exit(0);
}
else
{
wait(NULL);
wait(NULL);
printf(“info1 from parent process\n”);
printf(“info2 from parent process”);
_exit(0);
}
}
11 网络通信中,网络数据包的发送方式有哪些?
面向有连接,面向无连接。广播,单播,组播。
12 ping的作用及原理?
探测两个主机之间的网络是否互通。
原理:ing 命令是基于 ICMP 协议来工作的,「 ICMP 」全称为 Internet 控制报文协议( Internet Control Message Protocol)。ping 命令会发送一份ICMP回显请求报文给目标主机,并等待目标主机返回ICMP回显应答。因为ICMP协议会要求目标主机在收到消息之后,必须返回ICMP应答消息给源主机,如果源主机在一定时间内收到了目标主机的应答,则表明两台主机之间网络是可达的。
13 写出TCP网络编程模型框架(C/S模型)。
S:socket
Bind
Listen
Accept
Send/sevce
C:
Socket
Conect
Send/sevce
14 二进制信号量与互斥信号量的区别?有什么作用?
根据定义, 互斥锁用于序列化对不能由多个线程同时执行的可重入代码段的访问。
根据定义, 信号量将共享资源的同时用户数限制为最大数量
信号量可以是互斥量,但互斥量永远不能是信号量。 这只是意味着二进制信号量可以用作互斥量,但是互斥量永远不能表现出信号量的功能。
- 信号量和Mutex(至少是最新的内核)本质上都是非递归的。
- 没有人拥有信号灯,而Mutex是拥有的,而所有者则对此负有责任。 从调试的角度来看,这是一个重要的区别。
如果是Mutex,则拥有Mutex的线程负责释放它。 但是,在信号量的情况下,不需要此条件。 任何其他线程都可以通过使用smps(function.e_ot)发出信号以释放信号量
对开发人员来说另一个重要的区别是,信号量是系统范围的,除非以其他方式进行清理,否则它们将以文件形式保留在文件系统中。 互斥锁是整个进程的,并在进程退出时自动清除。
- 信号量的性质使得可以在同步相关和不相关的进程以及线程之间使用它们。 Mutex仅可用于线程之间以及最多相关进程之间的同步(最新内核的pthread实现具有允许在相关进程之间使用Mutex的功能)。
- 根据内核文档,与信号量相比,互斥量更轻。 这意味着与使用Mutex的程序相比,使用信号量的程序具有更高的内存占用量。
- 从使用的角度来看,与信号量相比,互斥体的语义更简单。
15 TCP/ip协议体系结构模型将网络分为几层?分别是什么?
四层:数据链路层,网络层,传输层。应用层。
四 编程题(5分)
- (附加题 10分)编写一个TCP通信程序,实现如下功能:连接到192.168.1.1的4000端口连接成功后接受数据,数据格式为:数据固定标识(6个字节,分别为0x00,0x00,0x01,0x00,0x01,0xb4)+数据长度(4个字节 网络字节序)+数据。当收到的数据包含有"yes"字符串时,回应"yes",否则回应"no"。回应的数据格式与接受的数据格式一致。
2 写出相关的数据库SQL语句(5分)
创建一张表(table)
给table增加两项内容
查询
更新第一行内容
删除该表(table)