管道 通信的方式 在通信系统中,根据数据传输的方向和方式,通信可以被分为单工、双工和半双工三种模式。 通信方式 描述 单工通信 永远只能由一方向另一方发送数据 半双工通信 双方都可以收发数据, 但是在同一时刻只能一端发另一端收 全双工通信 两端可以同时收发数据 命名管道 Linux 中的命名管道(named pipe)是一种特殊类型的文件, 又称为…
无缓冲文件流 带用户态缓冲区的文件流: 这类文件流属于语言的库函数,是对系统调用的封装。 它们使用用户态缓冲区来减少系统调用的次数,提高 I/O 操作的效率。 用户程序通过缓冲区与文件进行交互,而不需要直接进行系统调用。 用户态缓冲区的作用: 用户态缓冲区作为数据传输的中间层,由语言的标准库管理。 它的存在简化了用户程序的 I/O 操作,因为用户程…
文件系统编程概述 三种类型的函数对比 ISO C 标准库函数: 这些函数是由 ISO(国际标准化组织)提供的,具有最好的通用性和跨平台性。在所有遵循 ISO 标准的现代 C 编译平台上,这些函数的行为都是一致的。 这些函数提供了一些通用的功能实现,例如:printf、scanf、fopen、malloc 等。 它们在 man 手册的第 3 部分(3…
Linux 系统层次结构 内核交互 内核交互的定义: 内核交互是指用户空间程序请求操作系统内核执行某些操作的过程。由于内核控制着计算机的所有硬件资源,因此任何需要访问或控制这些资源的操作都需要通过内核来完成。 内核的作用: 内核负责管理计算机的硬件资源,包括但不限于: CPU 调度 内存管理 外部设备(如键盘、鼠标、显示器等) 进程和线程的创建、调…
C 语言标准 ISO C 标准(International Standardization Organization C)是一套确保 C 语言函数在不同平台上具有一致行为的标准。这些标准定义了语言的语法、库函数以及它们的行为,从而为开发者提供了跨平台开发的便利。 例如,一些常见的 C 语言函数如 printf、scanf、malloc 和 fope…
输入输出流 文件打开方式 在处理文件操作时,我们可以通过指定不同的模式来打开文件,主要的模式有: 'r' 只读模式:此模式下,文件将被打开用于读取,不允许写入或修改文件内容。 'w' 只写模式:此模式下,文件将被打开用于写入。如果文件已存在,其内容将被截断,即原有内容将被删除。 'a' 附加模式:此模式下,文件将被打开用于追加数据到文件末尾。如果文…
算法性能分析 时间复杂度描述了算法执行所需指令数量随着输入数据规模增长的变化趋势。它是一个理论概念,用于预测算法在不同规模输入下的性能表现,更好的时间复杂度通常意味着在相同条件下,算法的运行时间更短。 空间复杂度描述了算法执行过程中所需额外内存空间随着输入数据规模增长的变化趋势。它同样是一个理论概念,用于评估算法的内存使用效率,更好的空间复杂度意味…
二叉搜索树的定义 二叉树的定义: 二叉树是一种分层的数据结构,其中每个节点最多有两个子节点。这种结构允许每个节点有两个分支,分别指向其左子树和右子树。 二叉树的特殊形态: 完全二叉树(Complete Binary Tree):如果二叉树的高度为 h,除了第 h 层之外,所有层的节点数都达到最大,且第 h 层的节点从左到右连续排列,这样的树被称为完…
哈希的相关概念 哈希(Hash)是一个数学概念,而哈希表(Hash Table)是一种基于哈希的数据结构。 这两个概念虽然密切相关,但它们在本质上是不同的。哈希表是哈希概念的一种应用,但不应将两者混淆。 哈希映射 是一种特殊的转换过程,它将任意大小的输入(定义域)转换成固定长度的输出(值域)。这个过程的本质是将无限的输入空间映射到有限的输出空间。 …
队列的定义及其基本操作 队列是一种遵循先进先出(FIFO, First In First Out)原则的线性数据结构,广泛应用于计算机科学和日常生活中。以下是对队列及其基本操作的详细描述: 入队(Enqueue):在队列的末端(队尾)添加一个新元素。这个操作总是将新元素放在队列的最后。 出队(Dequeue):在队列的前端(队头)删除一个元素。执行…