版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
IO笔试真题及详细答案解析整套试题适用于Linux后台、服务端开发、嵌入式开发笔试,满分100分,答题时间60分钟,核心考察文件IO、标准IO、阻塞/非阻塞IO、缓冲区机制、多路IO核心知识点,无偏题怪题,贴合企业真实招聘考核重点。一、单项选择题(共10题,每题3分,共30分)1.下列关于Linux文件描述符的说法,正确的是()A.文件描述符是字符串类型的文件标识B.0、1、2分别对应标准输出、标准输入、标准错误C.文件描述符是进程级别的资源,进程退出后自动释放D.一个文件只能对应一个文件描述符2.Linux系统调用中,属于阻塞式文件IO的是()A.open(O_NONBLOCK)+readB.普通read、write系统调用C.fread、fwrite库函数D.select监听后的read3.标准IO(stdio)和系统IO(系统调用)的核心区别是()A.标准IO只能操作普通文件,系统IO可操作所有文件B.标准IO自带用户态缓冲区,系统IO无用户态缓冲区C.标准IO是内核提供,系统IO是库函数实现D.标准IO执行效率低于所有系统IO4.以下哪种缓冲区刷新方式不会主动刷新缓冲区数据到磁盘()A.调用fflush()函数B.程序正常退出C.缓冲区数据未满,程序休眠D.关闭文件流fclose()5.关于非阻塞IO,下列描述错误的是()A.数据未就绪时,read会立即返回,不会挂起进程B.非阻塞IO需要配合循环读取,否则可能读不到完整数据C.非阻塞IO可以彻底避免CPU空转D.普通文件默认不支持非阻塞读写特性6.select、poll、epoll都是多路IO复用模型,其中效率最高、适配高并发场景的是()A.selectB.pollC.epollD.三者效率一致7.下列文件打开模式中,会清空文件原有内容的是()A.rB.aC.wD.r+8.进程打开一个文件后,fork创建子进程,关于文件描述符说法正确的是()A.子进程会复制父进程文件描述符,共享文件偏移量B.子进程不会继承父进程的文件描述符C.父子进程文件描述符相互独立,偏移量互不影响D.父进程关闭文件后,子进程无法继续读写该文件9.下列不属于Linux四大基础文件类型的是()A.普通文件B.目录文件C.压缩文件D.管道文件10.关于IO缓冲区,下列说法正确的是()A.无缓冲IO所有读写直接落地磁盘B.行缓冲遇到空格自动刷新C.全缓冲只有缓冲区写满才会刷新,无其他刷新条件D.标准输出默认是行缓冲模式二、填空题(共5题,每题4分,共20分)1.Linux中标准输入文件描述符为______,标准输出为______,标准错误为______。2.标准IO的三种缓冲机制分别是:______、______、______。3.多路IO复用中,epoll的两种工作模式是______和______,其中______模式为水平触发,兼容性更强。4.open函数创建文件时,______参数用于指定文件权限,权限最终会受______掩码影响。5.阻塞IO的核心特点是:数据未就绪时,进程会被______,让出CPU资源。三、简答题(共3题,每题10分,共30分)1.简述标准IO(库函数)和系统IO(系统调用)的区别与各自适用场景。2.详细说明阻塞IO、非阻塞IO、IO多路复用的工作原理及优缺点。3.解释文件偏移量的概念,并说明fork后父子进程文件偏移量的变化规则。四、编程题(共1题,20分)使用Linux系统IO(open/read/write/close)实现文件拷贝功能,将test1.txt文件内容完整拷贝到test2.txt,要求:1.手动设置读写缓冲区,不使用标准IO库函数;2.处理文件打开失败、读写异常等错误;3.代码注释清晰,逻辑完整可直接编译运行。参考答案及详细解析一、单项选择题答案及解析1.答案:C解析:文件描述符是int整型数字;0、1、2分别是标准输入、标准输出、标准错误;一个文件可被多个进程打开,对应多个文件描述符。文件描述符属于进程私有资源,进程终止后系统自动回收释放。2.答案:B解析:普通read、write是默认阻塞式系统调用,数据未就绪时挂起进程。带O_NONBLOCK标记的IO为非阻塞;fread/fwrite是标准IO库函数,不属于系统调用;select是多路复用机制,本身不读写数据。3.答案:B解析:系统IO是内核提供的系统调用,无用户态缓冲区,每次读写都会陷入内核;标准IO是C库封装的函数,自带用户态缓冲区,减少系统调用次数,提升效率。二者均可操作所有Linux文件类型,标准IO整体效率更高。4.答案:C解析:fflush主动刷新缓冲区、fclose关闭文件流、程序正常退出都会触发缓冲区刷新。程序休眠时,缓冲区数据未满不会主动落地,数据仍保留在内存缓冲区中。5.答案:C解析:非阻塞IO数据未就绪时立即返回,业务代码需要循环轮询检测数据,会造成CPU空转,占用CPU资源,无法避免空转。其余选项描述均正确。6.答案:C解析:select和poll时间复杂度为O(n),文件描述符数量越多效率越低;epoll基于事件驱动,时间复杂度O(1),支持海量文件描述符监听,是高并发服务端首选IO模型。7.答案:C解析:r只读、r+读写,均不清空文件;a为追加模式,在文件末尾写入,不覆盖原有内容;w模式打开文件会直接清空原有数据,文件不存在则创建。8.答案:A解析:fork子进程会完整复制父进程的文件描述符表,父子进程共享同一个文件结构体,因此共享文件偏移量。父进程关闭文件描述符,仅销毁自身的fd,不会影响子进程正常读写。9.答案:C解析:Linux四大基础文件类型:普通文件、目录文件、管道文件、设备文件。压缩文件属于普通文件的一种,不属于独立文件类型。10.答案:D解析:无缓冲IO仅针对标准错误,并非所有读写都落地磁盘;行缓冲遇到换行符刷新,不是空格;全缓冲除缓冲区写满外,fflush、程序退出、文件关闭也会刷新。标准输出stdout默认行缓冲,标准输入stdin默认行缓冲,标准错误stderr无缓冲。二、填空题答案1.0、1、22.全缓冲、行缓冲、无缓冲3.水平触发(LT)、边缘触发(ET)、水平触发(LT)4.mode、umask5.阻塞挂起三、简答题详细答案1.标准IO与系统IO的区别及适用场景区别:(1)层级不同:系统IO是内核原生系统调用(open/read/write/close),属于内核层接口;标准IO是C库封装的函数(fopen/fread/fwrite),属于用户层接口。(2)缓冲区不同:系统IO无用户态缓冲区,每次读写都会触发内核态切换;标准IO自带用户态缓冲区,合并多次小IO操作,减少系统调用次数。(3)返回值与操作粒度不同:系统IO以字节为单位读写,返回真实读写字节数;标准IO以缓冲区为单位读写,封装了数据拼接、残留数据处理逻辑。适用场景:(1)标准IO:适合普通文件读写、日志打印、小数据频繁读写场景,开发效率高、执行效率优。(2)系统IO:适合大数据一次性读写、设备文件、管道、网络套接字操作,以及需要精准控制读写过程、无缓冲实时落地的场景。2.阻塞IO、非阻塞IO、IO多路复用原理及优缺点(1)阻塞IO原理:默认IO模式,调用read/write后,若数据未就绪,进程主动挂起,释放CPU,等待数据就绪后内核唤醒进程,完成读写。优点:不占用CPU资源,实现简单,资源利用率高;缺点:单线程只能处理一个IO任务,无法并发处理多个文件描述符,并发能力极差。(2)非阻塞IO原理:通过O_NONBLOCK标记设置,调用读写接口时,无论数据是否就绪,函数立即返回,数据未就绪则返回错误码,用户程序通过循环轮询检测数据状态。优点:不会阻塞进程,可轮流处理多个IO任务;缺点:轮询机制会造成大量CPU空转,资源浪费严重,高并发场景不可用。(3)IO多路复用原理:通过select/poll/epoll统一监听多个文件描述符,任意一个fd数据就绪时,统一通知用户进程,再执行对应读写操作。优点:单线程可监听海量IO任务,无CPU空转,并发性能优异,是服务端高并发核心模型;缺点:存在用户态和内核态数据拷贝开销,小场景下实现相对复杂。3.文件偏移量概念及fork后偏移量规则文件偏移量:是文件内部的读写指针,记录当前文件读写的位置,本质是一个long类型数值,标识距离文件起始位置的字节偏移量。每次读写操作后,偏移量会自动向后移动对应读写字节数。fork后偏移量规则:1.fork创建子进程时,子进程复制父进程的文件描述符,父子进程指向内核中同一个文件结构体,因此共享同一个文件偏移量。2.父进程读写文件改变偏移量后,子进程后续读写会延续最新的偏移位置,不会从头读取。3.父子进程独立关闭文件描述符,互不影响,所有fd关闭后内核才会释放文件资源。四、编程题标准答案(可直接编译运行)c
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include<errno.h>
#include<string.h>
#defineBUF_SIZE1024//自定义读写缓冲区大小
intmain(intargc,char*argv[])
{
intfd_src,fd_dest;
intread_len,write_len;
charbuf[BUF_SIZE]={0};
//1.打开源文件test1.txt,只读模式
fd_src=open("test1.txt",O_RDONLY);
if(fd_src==-1)
{
perror("opentest1.txtfailed");
return-1;
}
//2.创建目标文件test2.txt,读写模式,权限0644
fd_dest=open("test2.txt",O_RDWR|O_CREAT|O_TRUNC,0644);
if(fd_dest==-1)
{
perror("opentest2.txtfailed");
close(fd_src);//打开失败,关闭已打开的文件
return-1;
}
//3.循环读取源文件,写入目标文件
while((read_len=read(fd_src,buf,BUF_SIZE))>0)
{
//循环写入,处理写入不完整的情况
write_len=0;
while(write_len<read_len)
{
intret=write(fd_dest,buf+write_len,read_len-write_len);
if(ret==-1)
{
perror("writefailed");
close(fd_src);
close(fd_dest);
return-1;
}
write_len+=ret;
}
memset(buf,0,BUF_SIZE);//清空缓冲区,避免残留数据
}
//读取异常判断
if(read_len==-1)
{
perror("readfailed");
close(fd_src);
close(fd_dest);
return-1;
}
//4.关闭文件描述符
close(fd_src);
close(fd_dest);
printf("文件
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2027届甘肃临夏和政县七上数学期末教学质量检测模拟试题含解析
- 2027届浙江省宁波镇海区六校联考数学八上期末监测模拟试题含解析
- 江苏省无锡市南长实验中学2027届九上数学期末预测试题含解析
- 2026年注册电气工程师考试电力系统保护自动化基础模拟试题及答案
- 2026中国智能制造系统解决方案需求分析及供给能力与投资回报研究
- 基础护理:静脉注射与输血
- 肿瘤护理个案汇报课件
- 预防静脉炎的护理措施
- 2026综合管廊系统建设市政基础设施优化智慧城市建设市场趋势研究
- 2026中国金融科技监管沙盒实施效果与创新平衡点分析
- 2026新教材语文 六年级上册语文园地三 课件
- 2026年湖南省高考真题历史试题试卷答案解析
- 2026年精神卫生日宣传课件
- 室外消防给水管道敷设施工方案
- 2026秋新教材人教版四年级上册数学|第三单元 多位数乘两位数 教案(共13课时)
- 2026年法律硕士(法学)考研真题及完整答案解析(统考回忆版)
- 组织培养与植物离体种质资源保存
- 2026年银行团队主管竞聘面试题库
- 自来水水厂检验工作制度
- 边坡注浆施工方案
- 揭秘助剂在氨纶混纺织物防沾色中的关键作用及与染料的协同机制
评论
0/150
提交评论