面试题总结(二)【IO】【华清远见西安中心】

  • 文件系统的分类及其定义?

    Linux文件系统可以分为主要三类:

    1. 基于磁盘的文件系统(Disk-based File Systems):这类文件系统是最常见的,用于在硬盘上存储和组织文件。常见的基于磁盘的文件系统包括ext2、ext3、ext4、XFS、JFS等。

    - ext2(第二扩展文件系统):是Linux最早的文件系统之一,支持文件和目录的权限、链接、日志和碎片整理等功能。
    - ext3(第三扩展文件系统):是ext2的升级版本,增加了日志功能,提高了文件系统的稳定性和恢复能力。
    - ext4(第四扩展文件系统):是ext3的进一步改进,提供更高的性能和可靠性,支持更大的文件和分区。
    - XFS:是一个高性能的日志文件系统,支持大文件和大容量分区,适用于高负载的服务器环境。
    - JFS(日志文件系统):是一个高性能的日志文件系统,具有快速恢复和高容量的特点。

    2. 网络文件系统(Network File Systems):这类文件系统允许远程计算机通过网络访问和共享文件。常见的网络文件系统包括NFS(网络文件系统)和CIFS(共享文件系统,也称为SMB)。

    - NFS:是一种用于在网络上共享文件和目录的协议,允许用户在远程计算机上像访问本地文件一样访问远程文件。
    - CIFS:是一种用于在Windows和Linux之间共享文件和打印机的协议,允许Linux系统访问Windows共享文件夹。

    3. 虚拟文件系统(Virtual File Systems):这类文件系统提供了一个抽象层,使不同类型的文件系统能够以统一的方式被应用程序和用户访问。常见的虚拟文件系统包括procfs、sysfs和tmpfs等。

    - procfs:是一个特殊的文件系统,提供了对系统内核和进程信息的访问,以文件的形式呈现。
    - sysfs:是一个用于访问和配置Linux内核设备和驱动程序的文件系统,提供了对硬件设备的访问接口。
    - tmpfs:是一种临时文件系统,将文件存储在内存中,可以用于临时存储和高速缓存。

  • 什么是文件类型?

    在Linux中,每个文件都有一个特定的文件类型。文件类型是指文件的性质和用途。以下是常见的Linux文件类型:

    1. 普通文件(Regular File):普通文件是最常见的文件类型,包含文本文件、二进制文件、脚本等。普通文件可以直接执行或读取。

    2. 目录(Directory):目录是一种特殊的文件类型,用于存储其他文件和子目录。目录中可以包含其他文件和目录,以组织文件系统的结构。

    3. 符号链接(Symbolic Link):符号链接也被称为软链接或快捷方式,它是指向另一个文件或目录的指针。符号链接类似于Windows中的快捷方式,可以将一个文件或目录链接到另一个位置。

    4. 设备文件(Device File):设备文件是用于访问系统硬件设备的文件。Linux将硬件设备视为文件,通过读写这些设备文件来与硬件进行交互。设备文件分为字符设备文件(Character Device)和块设备文件(Block Device)两种类型。

    - 字符设备文件:用于与字符设备进行通信,例如键盘、鼠标、串口等。
    - 块设备文件:用于与块设备进行通信,例如硬盘、USB闪存驱动器等。

    5. 套接字(Socket):套接字用于在不同的进程之间进行通信,可以用于网络通信和进程间通信。

    6. 管道(Named Pipe):管道是一种特殊的文件类型,用于实现进程间通信。它可以用于将一个进程的输出直接传递给另一个进程的输入。

    7. 字符特殊文件(Character Special File)和块特殊文件(Block Special File):这两种特殊文件类型用于访问设备驱动程序提供的特殊功能,例如磁带驱动器、打印机等。

    这些文件类型通过文件系统的元数据来标识和区分,可以使用命令如`ls -l`来查看文件的类型和其他属性。

  • 什么是系统调用?

    Linux系统调用是操作系统内核提供给用户空间程序的接口,用于访问和操作底层系统资源。通过系统调用,用户空间程序可以请求操作系统执行特定的功能或操作,例如文件操作、进程管理、网络通信等。

    系统调用的实现是通过软中断或陷阱机制实现的,用户空间程序在需要调用系统功能时,会通过特定的系统调用号和参数将请求传递给内核,内核根据调用号和参数执行相应的操作,并返回结果给用户空间程序。

    Linux系统调用提供了一系列标准化的接口,使得用户空间程序可以跨平台地访问底层系统资源。常见的Linux系统调用包括:

    1. 文件系统相关的系统调用:用于文件的创建、打开、读取、写入、关闭等操作,例如open、read、write、close等。

    2. 进程管理相关的系统调用:用于创建、终止、等待、信号处理等操作,例如fork、exec、wait、exit等。

    3. 网络通信相关的系统调用:用于网络套接字的创建、发送、接收、连接等操作,例如socket、send、recv、connect等。

    4. 内存管理相关的系统调用:用于分配、释放、映射、保护内存等操作,例如malloc、free、mmap、mprotect等。

    5. 时间和日期相关的系统调用:用于获取和设置系统时间、休眠等操作,例如time、sleep等。

    6. 用户和权限相关的系统调用:用于用户身份验证、权限管理等操作,例如getuid、setuid等。

    用户空间程序通过调用这些系统调用来访问底层的系统资源,从而完成各种操作和功能。系统调用提供了一种安全的方式来访问内核功能,并确保用户程序无法直接访问和破坏底层系统资源。

  • 什么是标准IO?

    标准IO(Standard I/O)是一种C语言库函数,提供了对标准输入、标准输出和标准错误的访问和操作。它是建立在底层文件IO(File I/O)的基础上的高级接口,使得读取和写入数据更加简单和方便。

    标准IO主要通过以下三个标准文件流进行数据的输入和输出:

    1. 标准输入流(stdin):标准输入流是程序接受输入的默认来源,通常是键盘。可以使用标准IO函数从stdin读取用户输入的数据。

    2. 标准输出流(stdout):标准输出流是程序的默认输出目标,通常是终端窗口。可以使用标准IO函数将数据输出到stdout,以供用户查看。

    3. 标准错误流(stderr):标准错误流用于输出错误和警告消息,通常也是终端窗口。与标准输出流相比,标准错误流通常用于输出不应被重定向的重要信息。

    标准IO库提供了一系列函数来进行输入和输出操作,例如:

    - printf:向标准输出流(stdout)输出格式化的数据。
    - scanf:从标准输入流(stdin)读取格式化的数据。
    - putchar:将一个字符输出到标准输出流(stdout)。
    - getchar:从标准输入流(stdin)读取一个字符。
    - fprintf:向指定文件流输出格式化的数据。
    - fscanf:从指定文件流读取格式化的数据。

    使用标准IO函数可以简化文件IO的操作,提供了更高级和更易用的数据输入输出方式,使得程序的编写和调试更加方便。同时,标准IO函数还提供了缓冲区的功能,可以提高IO的效率。

  • 什么是文件IO?

    文件IO(File I/O)是指对文件进行输入和输出的操作。在计算机中,文件是用于存储和组织数据的一种重要的数据持久化形式。文件IO允许程序通过读取和写入文件来获取和保存数据,实现数据的长期存储和共享。

    文件IO通常包括以下几个基本步骤:

    1. 打开文件:使用文件IO函数打开文件,建立程序和文件之间的连接。打开文件时需要指定文件的路径、名称和打开模式(例如只读、只写、追加等)。

    2. 读取文件:通过文件IO函数从打开的文件中读取数据。可以按字节、行、块等不同的方式读取文件中的数据。

    3. 写入文件:通过文件IO函数向打开的文件中写入数据。可以按字节、行、块等不同的方式将数据写入文件。

    4. 关闭文件:使用文件IO函数关闭已打开的文件,断开程序与文件之间的连接。关闭文件后,程序无法再对文件进行读写操作。

    文件IO可以用于读取和写入不同类型的文件,包括文本文件和二进制文件。文本文件是由字符组成的文件,可以直接使用文本编辑器打开和查看。而二进制文件由字节组成,包含了更复杂的数据结构和格式,例如图片、音频、视频等。

    在C语言中,文件IO函数主要通过标准库提供,包括fopen、fclose、fread、fwrite等函数。通过这些函数,程序可以打开、读取、写入和关闭文件,实现对文件的操作和管理。文件IO提供了一种通用且灵活的方式来处理文件数据,是程序开发和数据处理中重要的一部分。

  • 库的类型有哪些?

    在Linux系统中,常见的库类型有以下几种:

    1. 静态库(Static Library):静态库是在编译时被链接到程序中的库文件。它将库的目标代码直接嵌入到可执行文件中,使得可执行文件在运行时不再需要依赖外部的库文件。静态库的文件名通常以`.a`为后缀,例如`libexample.a`。

    2. 共享库(Shared Library):共享库是在运行时被动态链接到程序中的库文件。它可以被多个程序共享使用,节省内存空间,并且可以通过升级或替换共享库文件来更新程序的功能。共享库的文件名通常以`.so`为后缀,例如`libexample.so`。

    3. 动态链接库(Dynamic Linking Library):动态链接库是一种特殊的共享库,它在程序执行时才会被动态加载和链接。动态链接库可以通过使用`dlopen`和`dlsym`等动态链接库函数在程序运行时动态加载和调用库中的函数。动态链接库的文件名通常以`.so`为后缀,例如`libexample.so`。

    4. 系统库(System Library):系统库是操作系统提供的库,包含了操作系统的核心功能和服务。它们通常是共享库的形式,由操作系统提供和维护。例如,C语言的标准库(libc)和图形界面库(libX11)都属于系统库。

    除了以上几种常见的库类型,还有一些特殊的库类型,例如动态加载库(Dynamic Loading Library),用于在程序运行时动态加载和卸载库文件;插件库(Plugin Library),用于扩展程序的功能;以及特定领域的库,例如网络库、数据库库等。

    使用库可以提供可重用的代码和功能,加快程序的开发过程,提高代码的可维护性和可扩展性。在编程中,可以通过编译器和链接器来将库文件与程序进行链接,以实现对库中函数和功能的调用和使用。

  • 如何制作静态库和动态库?

    制作静态库和动态库通常需要经过以下步骤:

    1. 编写源代码:根据需要,编写包含所需功能的源代码文件。可以将相关的函数、结构体和其他定义放在一个或多个源代码文件中。

    2. 编译源代码:使用编译器将源代码文件编译成目标文件(Object File)。可以使用以下命令将源代码编译为目标文件:

       
       gcc -c file1.c file2.c -o output.o
       

       这将编译`file1.c`和`file2.c`两个源代码文件,并将生成的目标文件保存为`output.o`。

    3. 静态库制作:

       - 打包目标文件:使用静态库打包工具(如`ar`命令)将生成的目标文件打包成静态库文件。可以使用以下命令创建静态库文件:

         
         ar rcs libexample.a file1.o file2.o
         

         这将创建一个名为`libexample.a`的静态库文件,并将`file1.o`和`file2.o`两个目标文件添加到静态库中。

       - 安装静态库:将生成的静态库文件安装到系统的指定位置,以便其他程序可以链接使用静态库。可以使用以下命令将静态库安装到指定目录:

         
         cp libexample.a /usr/local/lib
         

    4. 动态库制作:

       - 编译共享库:使用编译器将源代码文件编译成共享库(Shared Library)文件。可以使用以下命令将源代码编译为共享库文件:

         
         gcc -shared -fPIC file1.c file2.c -o libexample.so
         

         这将编译`file1.c`和`file2.c`两个源代码文件,并将生成的共享库保存为`libexample.so`。

       - 安装动态库:将生成的共享库文件安装到系统的指定位置,以便其他程序可以动态链接使用共享库。可以使用以下命令将共享库安装到指定目录:

         
         cp libexample.so /usr/local/lib
         

         还需要更新动态链接器的库路径配置,可以使用以下命令更新库路径配置文件:

         
         echo "/usr/local/lib" | sudo tee -a /etc/ld.so.conf.d/mylib.conf
         sudo ldconfig
         

    5. 使用库:在其他程序中,可以通过编译器和链接器来链接并使用制作好的静态库或动态库。需要在编译时指定库文件的路径和库名称,例如:

       
       gcc main.c -L/usr/local/lib -lexample -o program
       

       这将编译`main.c`文件,并使用静态库或动态库`libexample`进行链接,生成可执行文件`program`。

    请注意,库的制作还涉及到一些其他的选项和参数,具体的操作可能会因编译器和操作系统而有所不同。以上是一个简单的示例,供参考。在实际使用中,可能需要根据具体情况进行调整和修改。

  • 静态库和动态库的区别?

    静态库和动态库是两种不同的库文件形式,它们之间有以下几个主要区别:

    1. 文件大小和内存占用:静态库在编译时会被完整地链接到程序中,因此生成的可执行文件会包含静态库的全部代码和数据,导致可执行文件的大小较大。而动态库在运行时才会被动态加载和链接到程序中,因此可执行文件只包含对动态库的引用信息,不会包含动态库的实际代码和数据,导致可执行文件的大小较小。动态库在内存中也仅需要占用一份内存,可以被多个程序共享使用,而静态库则会在每个程序中都复制一份。

    2. 更新和维护:静态库在编译时被链接到程序中,一旦生成可执行文件后,静态库的更新和维护就需要重新编译和链接整个程序。而动态库可以在不重新编译和链接程序的情况下,通过替换动态库文件来更新和维护程序的功能。这使得动态库更加灵活和易于维护。

    3. 运行时加载:静态库在程序加载时会被完整地加载到内存中,因此在程序运行期间不需要额外的加载操作。而动态库在程序运行时才会被动态加载到内存中,可以通过使用动态链接库函数(如`dlopen`和`dlsym`)来动态加载和调用库中的函数。

    4. 共享性:动态库可以被多个程序共享使用,节省了内存空间。而静态库在每个使用它的程序中都会复制一份,导致程序占用的内存空间较大。

    5. 可移植性:动态库可以在不同平台和系统之间共享使用,只需要将动态库文件交给其他程序即可。而静态库则需要根据不同的平台和系统进行重新编译和链接。

    根据具体的需求和场景,可以选择使用静态库或动态库。静态库适用于需要在编译时完整链接库的情况,例如独立的可执行文件或静态链接的插件。而动态库适用于需要在运行时动态加载和链接库的情况,例如共享的库、插件或动态加载的模块。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/237151.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

社交网络分析(汇总)

这里写自定义目录标题 写在最前面社交网络分析系列文章汇总目录 提纲问题一、社交网络相关定义和概念提纲问题1. 社交网络、社交网络分析;2. 六度分隔理论、贝肯数、顿巴数;3. 网络中的数学方法:马尔科夫过程和马尔科夫链、平均场理论、自组织…

使用JDBC对数据库进行简单操作

用Connection获得了数据库连接对象后,可以用Statement类型进行数据库操作。 在Statement对象中,有三种,分别是Statement,PrepareStatement,CallableStatement。 这三个的区别在于: Statement 用于执行不…

KubePi JWT 默认密钥权限绕过漏洞复现(CVE-2023-22463)

0x01 产品简介 KubePi 是一款简单易用的开源 Kubernetes 可视化管理面板。 0x02 漏洞概述 KubePi 存在权限绕过漏洞,攻击者可通过默认 JWT 密钥获取管理员权限控制整个平台,使用管理员权限操作核心的功能。 0x03 影响范围 KubePi <= 1.6.2 0x04 复现环境 FOFA: ti…

【Jenkins】远程API接口:Java 包装接口使用示例

jenkins-rest 库是一个面向对象的 Java 项目&#xff0c;它通过编程方式提供对 Jenkins REST API 的访问&#xff0c;以访问 Jenkins 提供的一些远程 API。它使用 jclouds 工具包构建&#xff0c;可以轻松扩展以支持更多 REST 端点。其功能集不断发展&#xff0c;用户可以通过拉…

Linux网络编程——概述、TCP/UDP的对比

为什么要学习网络编程 前面对于进程间通信我们讲了&#xff1a;管道、消息队列、共享内存、信号、信号量。 这5种通信方式都是依靠Liunx内核。这也造成了他们的一个缺点就是&#xff0c;这些通信方式只能在单机运行。那么如何实现多机通信呢&#xff1f;这就需要引入网络编程。…

怎么压缩过大的GIF图片?几个步骤轻松搞定!

GIF图片由于其图片格式&#xff0c;本身就会很大&#xff0c;但是微信QQ还有一些其他的社交平台对上传的表情包是有限制的&#xff0c;这个时候就需要借助一些图片处理工具对GIF进行压缩。 下面就向大家介绍三种好用的方法并展示具体的操作步骤。 一、使用嗨格式压缩大师进行压…

RouterSrv-路由功能

2023年全国网络系统管理赛项真题 模块B-Windows解析 题目 安装Remote Access服务开启路由转发,为当前实验环境提供路由功能。启用网络地址转换功能,实现内部客户端访问互联网资源。答题步骤 安装Remote Access服务开启路由转发,为当前实验环境提供路由功能。 配置网卡 加…

2024年第二届“华数杯”国际大学生数学建模竞赛思路及代码

比赛时间&#xff1a;2024.01.17 06:00 至 2024.01.21 09:00 建模思路及代码 比赛开始后第一时间更新&#xff0c;建议先收藏哦 思路及代码更新地址 一、比赛背景 2024年第二届“华数杯”国际大学生数学建模竞赛&#xff08;以下简称“竞赛”&#xff09;是中国未来研究会…

Day67力扣打卡

打卡记录 美丽塔 II&#xff08;前缀和 单调栈&#xff09; 链接 class Solution:def maximumSumOfHeights(self, maxHeights: List[int]) -> int:n len(maxHeights)stack collections.deque()pre, suf [0] * n, [0] * nfor i in range(n):while stack and maxHeights…

eNSP拓扑建立:RIP静态路由

实验名称&#xff1a; RIP动态路由协议 实验目的&#xff1a; 1、掌握RIPv1的配置方法 2、查看RIP路由分析过程 3、掌握测试RIP网络连通性的方法 步骤一:建立拓扑图 步骤二&#xff1a;配置PC终端的ip、子网掩码、网关。 步骤三&#xff1a;配置路由器&#xff0c;如图所示 步…

【SpringBoot实战】基于阿里云实现文件上传

【SpringBoot实战】基于阿里云实现文件上传 在实际项目开发中&#xff0c;不可避免地会使用到阿里云OSS进行文件存储。尽管阿里云有详细的开发文档&#xff0c;但本篇博客的目的是让我们能够用简明的代码快速实现这个功能。 引入依赖 <dependencies><!-- 阿里云oss…

【K8s】3# 使用kuboard管理K8s集群(NFS存储安装)

文章目录 1.NFS是什么2.配置NFS服务器2.1.执行以下命令安装 nfs 服务器所需的软件包2.2.执行命令 vim /etc/exports&#xff0c;创建 exports 文件&#xff0c;文件内容如下2.3.执行以下命令&#xff0c;启动 nfs 服务2.4.检查配置是否生效 3.在客户端测试NFS3.1.执行以下命令安…

easyexcle处理复杂动态单元格合并问题,合并动态行列

GetMapping("getAddDelSummaryExport") ApiOperation("新增删除比例报表--导出") ApiImplicitParams({ApiImplicitParam(name "season", value "季节", paramType "query", dataType "String"),ApiImplicitPa…

Electron Vite打包后,部分图标未显示的解决方案

背景 这个问题&#xff0c;弄了一晚上&#xff0c;头都大了&#xff0c;找了一堆博客也没解决。主要参考这个&#xff1a;https://blog.csdn.net/m0_73845616/article/details/129741099。 下面讲一下我的解决方案。 解决方案 上面链接里的方法&#xff0c;我采用第二、三个都…

python中文语音识别

1&#xff09; 生成需要识别的wav文件&#xff0c;SpeechRecognition需要wav文件&#xff0c;不能识别mp3文件 安装库&#xff1a; sudo apt install espeak ffmpeg libespeak1 pip install pyttsx3 代码&#xff1a; def demo_tts_wav(): import pyttsx3 engine pytt…

C# Onnx Yolov8 Detect 物体检测 多张图片同时推理

目录 效果 模型信息 项目 代码 下载 C# Onnx Yolov8 Detect 物体检测 多张图片同时推理 效果 模型信息 Model Properties ------------------------- date&#xff1a;2023-12-18T11:47:29.332397 description&#xff1a;Ultralytics YOLOv8n-detect model trained on …

Istio 社区周报(第一期):2023.12.11 - 12.17

欢迎来到 Istio 社区周报 Istio 社区朋友们&#xff0c;你们好&#xff01; 我很高兴呈现第一期 Istio 社区周报。作为 Istio 社区的一员&#xff0c;每周我将为您带来 Istio 的最新发展、有见地的社区讨论、专业提示和重要安全新闻内容。 祝你阅读愉快&#xff0c;并在下一期中…

第二十二章 : Spring Boot 集成定时任务(一)

第二十二章 &#xff1a; Spring Boot 集成定时任务&#xff08;一&#xff09; 前言 本章知识点&#xff1a; 介绍使用Spring Boot内置的Scheduled注解来实现定时任务-单线程和多线程&#xff1b;以及介绍Quartz定时任务调度框架&#xff1a;简单定时调度器&#xff08;Simp…

ubuntu 18.04 共享屏幕

用于windows远程ubuntu 1. sudo apt install xrdp 2. 配置 sudo vim /etc/xrdp/startwm.sh 把最下面的test和exec两行注释掉&#xff0c;添加一行 gnome-session 3.安装dconf-editor : sudo apt-get install dconf-editor 关闭require encrytion org->gnome->desktop…

go从0到1项目实战体系二:数据类型

1. 数据类型: (1). bool类型(只能存true和false) (2). 数字类型: 主要有int(4个字节)、int8(1个字节,8是8个bit位)、int16(2个字节)、int32(3个字节)、int64(4个字节)、uint8(无符号)、uint16、uint32、uint64、float32(4个字节)、float64 (3). 字符类型: ①. 语法:var a b…