04Linux文件IO面试题

Linux文件IO面试题

1、Window系统和Linux系统的区别

1、Linux区分大小写,windows不区分大小写
2、Windows下,计算机是驱动器盘符区分所有文件。Linux没有盘符的概念,是用根目录区分所有文件。
3、Linux的所有类容都是以文件的形式保存的,包括硬件,用户。Windows的文件和硬件之间没有什么关系
4、Windows用文件后缀名区分文件,如:.exe,.txt等等。
Linux中:
文件类型 文件符号
普通文件 ‘ -’
目录文件 ‘ d’
管道文件 ‘ p’
链接文件 ‘ l’(硬链接和软链接)。
设备文件 (块设备 ’ b’ 、字符设备 ‘ c’ )
套接字文件 ‘s’
5、windows大部分软件收费,系统非开源。系统具有数量和质量的优势,由微软官方提供重要支持和服务 。
linux平台大都为开源自由软件,用户可以修改定制和再发布,由于基本免费没有资金支持,部分软件质量和体验欠缺;有全球所有的Linux开发者和自由软件社区提供支持。
6、windows下的执行文件是.exe文件,大部分是图形界面,不具有安全性。.exe文件不能直接在linux下安装与运行。
linux下的执行文件是二进制文件,大部分是字符界面,具有安全性,减少了木马攻击的可能性。
7、Windows软件安装是通过应用商店或者浏览器下载后安装。
Linux主要通过shell命令进行安装。可以使用apt方式安装(软件包管理系统)、rpm包安装、deb包安装、tar.gz源代码包安装、tar.bz2源代码包安装、yum方式安装(安装rpm包)、bin文件安装。
8、linux是字符界面,占用的系统资源较于windows下的图形界面所占的资源小。
Windows是图形界面,较于Linux的字符界面所占的资源大。

2、文件IO和标准IO的区别

1、文件IO是Linux系统调用内核的Api接口,而标准IO是调用C库的函数;
2、文件IO没有带缓冲,而标准IO带缓冲(缓冲buffer:是一种数据临时存放的机制。在进行文件的读取时,会先将读取到的数据存放到缓冲区,然后再从缓冲区传输到实际的文件中。使用缓冲区可以减少实际的读写次数,可以提高传输和写入效率)需要注意的是,缓冲区并不是必需的,有些情况下可以直接进行无缓冲的文件读写操作。然而,使用缓冲通常会带来性能上的提升,特别是对于频繁的文件操作。
3、文件IO操作的是文件描述符,标准IO操作的是流FILE; (流(Stream)是一个抽象的概念,表示数据在输入/输出设备(如文件、网络连接、终端等)之间的顺序传输)
4、文件IO和标准IO使用的函数不一样;

3、什么是流?你如何理解标准IO中的流

流(Stream)是指数据的有序序列,可以从源(输入流)传输到目标(输出流)。流可以用于在程序中进行输入和输出操作,以处理不同类型的数据。
在标准I/O中,流用于在程序和底层输入/输出设备之间进行数据传输。
标准I/O流有三种类型:
标准输入流(stdin):用于接收来自用户的输入,通常是键盘输入。
标准输出流(stdout):用于向用户输出结果,通常是显示在屏幕上。
标准错误流(stderr):用于输出程序的错误和异常信息,通常也是显示在屏幕上。

4、什么是文件描述符、文件描述符在使用时的原则、文件描述符最大能有多大

文件描述符(File Descriptor)是操作系统中用于标识已打开文件的整数值。是操作系统管理文件的一种方式,通过文件描述符可以对文件进行读取、写入和其他操作。
在UNIX和类UNIX系统中,文件描述符是一个非负整数。通常,0、1和2分别表示标准输入、标准输出和标准错误,也就是stdin、stdout和stderr。
其他的文件描述符则会在打开文件时被分配,每个打开的文件都会被分配一个唯一的文件描述符。
文件描述符在使用时遵循以下原则:
1、打开文件:在使用文件之前,需要通过系统调用(如open)来打开文件,并获取一个文件描述符。开文件时可以指定打开模式(读取、写入、追加等)和访问权限。
2、读取和写入:通过文件描述符可以使用系统调用(如read、write)来进行文件的读取和写入操作。
关闭文件:在不再使用文件时,应该通过系统调用(如close)来关闭文件描述符。关闭文件会释放操作系统中的相应资源,并使文件描述符可以被其他文件使用。
错误处理:在使用文件描述符时,应该检查系统调用的返回值,以处理可能的错误情况。错误处理可以包括处理读写错误、文件不存在等异常情况。
文件描述符最大能有多大:
文件描述符的最大值取决于操作系统和文件系统的限制。在大多数UNIX系统中,文件描述符的最大值通常是一个较大的正整数,如1024或更大。需要注意的是,文件描述符的最大值是全局的,对于单个进程而言,打开的文件描述符数量可能会受到系统资源限制(如进程的最大文件打开数)的影响。

5、什么是空洞文件、空洞文件是如何形成的?

空洞文件(Sparse File)是指在文件系统中占据了文件大小但实际并不占据磁盘空间的文件。它的特点是文件中存在一些连续的空白区域,这些空白区域在磁盘上并不实际存储数据。(没有写过的字节都被设为 0就是空洞文件。
空洞文件是如何形成的?
1、使用定位操作:在某些情况下,程序可以使用定位操作(如lseek)来设置文件的偏移量,然后进行写操作。如果写入的位置跳过了文件的某些部分,文件系统就会自动在跳过的这块区域创建空白区域,而不需要实际写入数据。这样就形成了空洞文件,其中的空白区域并不占据磁盘的空间
2、截断操作:当文件被截断时,即缩小文件大小,阶段操作可能会生成空洞文件。如果文件被截断后的大小小于被截断之前的大小,文件系统会将超出的部分空间释放,并在文件的末尾创建空白区域(空洞文件的空白区域是不包含任何字节的,而不是被填充为空字节’\0’。)
空洞文件的优点就是不占据磁盘空间,特别是在操作大型文件时,由于空洞文件上的空白区域不占据磁盘空间,因此可以在磁盘上存储更多数据。

6、标准IO中对于文件的访问 r,r+,w,w+,a,a+都是什么意思

r:对该文件只读(以只读方式打开文件)从文件的开头读取
r+:对该文件可读可写(以可读可写方式打开文件)文件的读取和写入数据从文件开头开始
w:对该文件只写,无法读取文件类容,。若文件不存在,则创建文件。若文件存在且有内容时,则会清空文件的内容。
w+:对该文件可读可写。若文件不存在,则创建文件。若文件存在且有类容时,会清空该文件的类容
a:对该文件可写,但是无法读取文件类容。若文件不存在,则创建文件。若文件存在且有内容时,写入的数据不会覆盖文件里面的类容,会直接追加在数据的末尾处;
a+:对该文件可读可写,若文件不存在,则创建文件。若文件存在且有内容时,写入的数据不会覆盖文件里面的类容,会直接追加在数据的末尾处;
需要注意的是,标准I/O中的文件访问模式是以文本方式进行操作的,即会对文本文件进行换行符的处理。如果要以二进制方式进行文件读写,可以在模式字符串末尾添加 “b” 标志(例如 “rb”、“wb” 等)。
文件IO的模式:
O_RDONLY : 以只读方式打开文件
O_WRONLY:以只写方式打开文件
O_RDWR:以可读可写方式打开文件
这三种方式都是不可以同时使用的(互斥),但是可以加上一下的几种模式一起使用:
O_CREAT:若是文件不存在则创建文件,若是文件存在则打开文件,不会生成新文件去覆盖旧文件
O_EXCL:当文件存在时会打开文件失败,返回一个-1标志,通常配合O_CREAT使用
O_TRUNK:擦除文件类容之后在打开,之前的类容被清除
O_APPEND:写入文件的类容会追加在问价的末尾,不会覆盖原有的数据。不会影响文件的读取,读取操作依然按照文件的当前位置进行文件读取操作

7、标准IO中的r+对应文件IO的写法是什么?

1、标准IO
FILE *fp;
fp = fopen(“1.c”, “r+”);
2、文件IO
int fd;
fd = open(“1.c”, O_RDWR);

8、系统IO和标准IO操作文件的区别?

1.1、文件类型:

  • 标准IO打开的是一个文件指针
  • 系统IO打开的是一个文件描述符

1.2 系统 IO优势

  • 系统IO具有通用性和简约性
  • 文件操作上对普通文件、管道文件、块设备文件、套接字文件等都可以使用。,并对文件类的数据读写不带任何格式
  • 数据的读写没有缓冲处理

1.3 标准 IO优势

  • 标准IO是系统IO的封装(把系统IO的功能扩展),功能更强大
  • 标准IO具有丰富的读写方式,可以按格式读写、按ASCII码字符读写、按二进制读写、按行读写、按数据块读写等
  • 提供数据读取缓冲,极大的提高读写效率

9、系统IO和标准IO缺省打开的三个标准文件的方式?

设备标准IO系统IO
标准输入设备(键盘)标准输入(stdin)STDIN_FILENO
标准输出设备(屏幕)标准输出(stdout)STDOUT_FILENO
标准出错设备(屏幕)标准错误输出(stderr)STDERR_FILENO

10、用open()创建新文件时,若该文件存在则可以返回错误信息的参数是那些?

1、O_CREAT标志:用于文件不存在时创建新文件

  • 如果文件不存在,则会创建新文件并返回有效的文件描述符
  • 如果文件存在,则创建操作依然成功,不会返回错误

2、O_EXCL标志:用于文件存在时返回错误

  • 如果指定了O_EXCL标志,同时文件存在,则创建失败,创建失败返回-1,并将’errno‘设置为EEXIST表示文件已经存在。

== 结合使用 O_CREAT | O_EXCL可以实现文件存在时返回错误标志==

文章总体上涵盖了一些关于文件IO和标准IO的基本概念和区别,以及一些相关的知识点,如文件描述符、流、文件访问模式等。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值