【Linux】
文章平均质量分 94
Linux学习笔记以及一些操作技巧
我要成为C++领域大神
code
展开
-
【高性能服务器】poll模型
🔥❤️poll 不再用 BitsMap 来存储所关注的文件描述符,取而代之用动态数组,以链表形式来组织,突破了 select 的文件描述符个数限制,当然还会受到系统文件描述符限制。但是 poll 和 select 并没有太大的本质区别,都是使用「线性结构」存储进程关注的 Socket 集合,因此都需要遍历文件描述符集合来找到可读或可写的 Socket,时间复杂度为 O(n),而且也需要在用户态与内核态之间拷贝文件描述符集合,这种方式随着并发数上来,性能的损耗会呈指数级增长。原创 2024-07-19 18:51:09 · 1148 阅读 · 8 评论 -
【Linux】Linux下使用套接字进行网络编程
🔥❤️在自定义的头文件中重新声明一个函数,函数名与接口函数不同,返回值、参数均与接口函数相同。在相应的源文件中定义我们的函数,将逻辑判断的过程放在函数中。这样在调用函数时就省去大量的if else判断int# endifint# endifintprotocol);原创 2024-06-27 21:30:59 · 1371 阅读 · 12 评论 -
【Linux】锁|死锁|生产者消费者模型
🔥❤️互斥锁可以避免多线程同时访问资源,避免资源异常,结果异常。在读写全局数据时加上锁,读写完成后解锁。pthread_mutex_t lock 互斥锁的数据类型原创 2024-06-26 21:41:37 · 1236 阅读 · 10 评论 -
【Linux】线程Thread
🔥❤️线程是进程中的一个执行单元经典的并发模型,多进程模型,占用大量的内存开销,庞大的进程间调度开销,提供一种开销更小,更轻量级的并发解决方案,多线程技术。线程在进程中,与进程共享资源和数据,进程是容器,线程是执行单元,进程退出可能导致所有线程退出。每个进程中都有一个主控线程,还有其他的普通线程,操作系统会给进程分配需要的内存单元。不支持线程技术的操作系统可以忽略线程概念,进程是调度单位。多线程操作系统下,进程是内存管理单位,线程才是唯一的调度单元。原创 2024-06-26 21:27:59 · 1239 阅读 · 2 评论 -
【Linux】使用信号进行进程间通信
🔥❤️父进程屏蔽SIGUSR1,然后将这个屏蔽集继承给子进程,子进程创建后默认屏蔽SIGUSR1,而后子进程完成信号捕捉。捕捉设定完毕,解除对SIGUSR1的屏蔽。这样可以避免子进程还未捕捉完成,就被先抵达的信号杀死。函数是一个用于向指定进程发送信号的函数,并附带一个额外的整数或指针值。提供了一个更高级的接口,可以携带附加数据,从而实现更复杂的进程间通信。结构体用于绑定捕捉函数,可以绑定的捕捉函数的原型取决于结构体中的。联合体,可以包含一个整数或一个指针值。函数可以携带数据进行传递,整型或者指针,取决于。原创 2024-06-25 18:12:28 · 501 阅读 · 0 评论 -
【操作系统】信号Signal超详解|捕捉函数
🔥❤️内核层与用户层就是不同级别的CPU访问权限。可以参考 Intel单核处理器的特权级别(Privilege Levels),也称为保护环(Protection Rings)。这种模式在操作系统中也存在,用于管理和限制不同层次的软件对硬件资源的访问权限。防止低权限的代码(如用户进程)直接访问高权限的资源(如操作系统内核),减少系统被恶意攻击。Level 0(环0)特权级别:最高级别的CPU权限,内核层(Kernel Mode)。访问权限:可以访问所有的硬件资源和执行所有的CPU指令。原创 2024-06-23 18:58:27 · 1415 阅读 · 8 评论 -
【Linux】孤儿进程|守护进程|Shell脚本设置守护进程开机自启
🔥❤️守护进程是孤儿进程的一种特殊情况,开发者创建父子进程模型,让父进程退出,子进程变为守护进程。是一种人为的孤儿进程。守护进程(Daemon Process)是在计算机系统中以后台方式运行的特殊进程,经典的后台服务进程。持续执行在后台完成特定服务,不干预前台任务。不依赖于终端或会话,它独立于终端控制并在系统级别执行特定的任务。普通的软件进程随用户持续,生命周期较短。守护进程的生命周期较长,开机启动关机结束,持续服务于平台。守护进程不能持续占用系统资源(CPU、内存等),长时间处于低开销模式。原创 2024-06-22 10:10:05 · 2304 阅读 · 13 评论 -
【操作系统】进程组Group|进程会话Session
🔥❤️一个进程组一般由一个组长和若干组员组成。终端进程被创建,默认就是进程组的组长进程(系统会分配一个进程组)。组长进程的唯一标志:组id==进程id原创 2024-06-21 13:57:50 · 634 阅读 · 0 评论 -
【操作系统】MMAP内存映射|零拷贝
🔥❤️MMAP:将文件映射到进程的用户空间,使得进程之间可以直接通过内存访问文件内容,从而实现文件内容的共享,而不需要通过传统的读写方式来操作。适用于大型数据的共享和持久化。使用mmap完成进程间的通信,也是确定通信方向,一个负责编辑修改映射内存,一个负责打印映射内存数据,不要让两端同时修改访问映射内存,会出现数据异常。私有映射:拷贝映射,将映射文件的数据拷贝一份到映射内存,两份数据独立无关联。原创 2024-06-20 14:59:01 · 1333 阅读 · 6 评论 -
【操作系统】pipe&mkfifo|管道详解
🔥❤️在进程的内核块创建管道缓冲区,由循环队列(circular buffer)实现。遵循先进先出,具有一定的暂存能力。管道缓冲区的大小是4k,老版本Ubuntu的管道大小都是64k管道通过pipe函数创建的读写文件描述符实现向管道写入和读取数据。原创 2024-06-19 11:27:59 · 1429 阅读 · 0 评论 -
【操作系统】多进程拷贝|进程重载
🔥❤️多进程模式下,如果某个进程失败,只需重新启动该进程或重新分配任务,而不必重新开始整个文件拷贝,提高了拷贝任务的健壮性。:通过将文件拷贝任务分散到多个进程,可以减小单个进程的负载,使系统在执行大文件拷贝时仍能保持较好的响应性。:在多进程环境下,进程在时间片内与CPU进行交互,时间片用完时进程会被中断,等待下一次CPU使用权限。:通过多进程处理,可以更高效地利用系统资源(CPU、内存),减少大文件拷贝任务的完成时间。在需要同时执行多个文件拷贝任务的场景,多进程可以同时处理多个任务,提高整体处理效率。原创 2024-06-18 16:00:47 · 1124 阅读 · 1 评论 -
【Linux】僵尸进程|wait&waitpid函数详解
🔥❤️僵尸进程(Zombie Process)是指一个已经完成执行(终止)的子进程,在父进程没有调用wait()或waitpid()来获取子进程的终止状态之前,该子进程的进程描述符仍然存在于系统中的状态。原创 2024-06-17 17:40:34 · 1312 阅读 · 6 评论 -
【Linux】execl函数详解|进程重载
🔥❤️execl函数用于执行一个新的程序,为一个进程的0-3G用户空间进行重载。执行一个指定的可执行文件,来替代当前进程,也就是说,它会加载一个新的程序映像并运行它,取代当前进程。原创 2024-06-17 12:39:40 · 1018 阅读 · 0 评论 -
【Linux】虚拟文件系统
🔥❤️虚拟文件系统(Virtual File System, VFS)是操作系统内核的一部分,它提供了一个抽象层,使得不同文件系统能够统一接口进行操作。VFS使得应用程序可以以统一的方式访问不同类型的文件系统,如本地文件系统、网络文件系统等,而不需要关心底层文件系统的具体实现。原创 2024-05-30 17:10:09 · 894 阅读 · 0 评论 -
探秘正则表达式:从grep命令到C语言
🔥❤️正则表达式(Regular Expression,简称 regex 或 regexp)是一种用来匹配字符串中字符模式的工具,经典的数据处理技术,可以实现数据查询匹配、数据清洗等等。正则表达式是一种强大的字符串处理工具,广泛应用于文本搜索、替换和处理任务。正则表达式的语法由一系列特殊字符和普通字符组成,通过这些字符的组合,可以精确地定义字符串的匹配模式。原创 2024-06-14 11:15:57 · 1491 阅读 · 0 评论 -
【Linux】深入剖析Linux文件系统
🔥❤️块组描述符表(Block Group Descriptor Table)是在 ext2、ext3 和 ext4 等文件系统中用于存储关于文件系统块组的信息的数据结构。块组描述符表存储了每个块组的描述符Block bitmap起始位置。块组中空闲inode(理论存储文件数量)和已分配inode的数量。inode bitmap起始位置。inode table起始位置。data block起始位置。块组描述符表通常存储在文件系统的固定位置,以便文件系统在挂载时能够快速访问。它是文件系统的原创 2024-05-29 10:23:09 · 1406 阅读 · 1 评论 -
【Linux】C语言系统函数实现阻塞和非阻塞读取终端
🔥❤️常规文件读取不会阻塞;无论读取多少数据, 函数都会在有限时间内返回。从终端设备或网络读取可能会阻塞。如果从终端输入的数据缺少换行符,则调用终端设备的 函数会阻塞。如果网络上没有接收到数据包,则调用网络的 函数会阻塞。至于阻塞的持续时间是不确定的。如果没有数据到达,进程将会无限期地保持阻塞状态。“阻塞”:当进程调用一个阻塞的系统函数时,它会进入睡眠(sleep)状态,此时内核会调度其他进程运行,直到等待的事件发生(比如在网络上收到数据包,或者等待指定的sleep睡眠时间结束),进程才会继续执行。原创 2024-05-28 09:45:00 · 1132 阅读 · 0 评论 -
【Linux】C语言系统函数实现cat命令
🔥❤️cat是常用的命令行工具,用于显示文件内容、将多个文件连接成一个文件以及创建文件。 名称来自于 "concatenate",表示它的原始目的是连接文件。 命令基本用法和功能这将会显示 文件的内容到标准输出(终端)上。这将会将 和 文件的内容连接起来,并将结果写入到 文件中。在这种情况下, 将会从标准输入中读取内容,直到遇到 EOF(Ctrl+D),然后将这些内容写入到 文件中。 显示特殊字符: 使用 选项可以显示文件中的不可见字符和特殊字符。例如:原创 2024-05-27 09:30:00 · 1021 阅读 · 0 评论 -
【Linux】Windows下打造炫酷Linux终端 zsh+oh my zsh+powerlevel10k
🔥❤️Windows Subsystem for Linux (WSL),是微软在 Windows 10 上提供的一个子系统,用于在 Windows 环境中运行 Linux 操作系统。WSL 提供了一个完整的 Linux 内核,允许用户在 Windows 上直接运行 Linux 命令行工具和应用程序,而无需双重启动或虚拟机。原创 2024-05-25 21:57:16 · 1122 阅读 · 0 评论 -
【Linux】C语言系统函数实现touch命令
🔥❤️touch是一个常用的命令行工具,在 Linux 和类 Unix 系统中使用。它主要用于创建空文件或者修改文件的访问时间(atime)和修改时间(mtime)。touchtouchtouch-t-r-c我们将用Linux系统函数中的。先来了解一下open函数。原创 2024-05-24 12:14:40 · 1372 阅读 · 1 评论 -
【Linux】C语言系统函数实现cp命令
🔥❤️cp命令是 Linux 和类 Unix 系统中常用命令,用于复制文件和目录。基本用法: 命令的基本语法是将源文件复制到目标文件这会将 复制到 中。如果 已经存在,将会被覆盖。同时复制多个文件: 命令可以同时复制多个文件到目标目录中。这会将 、 等文件复制到 目录中。递归复制目录:如果 命令的目标是一个目录,且使用了 或 选项, 命令将会递归地复制整个目录结构。保留文件属性:使用 或 选项可以保留源文件的属性(包括所有者、权限、时间戳等)。交互模式:使用 或原创 2024-05-24 13:26:33 · 1283 阅读 · 1 评论 -
【Linux】文件I/O操作
🔥❤️当我们在程序中调用C标准库函数,比如printf,send,cout,会传递相应的参数给该函数。这些函数虽然具体功能不同,但是底层调用的都是。C标准库函数的内部实现通常会调用底层的系统函数来完成所需的功能。举例来说,printf函数内部可能会调用write系统函数来将格式化的输出写入标准输出设备。系统函数(例如write)是由操作系统提供的函数,用于执行底层的系统操作。这些操作可能涉及到与设备、文件系统、网络等底层资源的交互。系统函数通常会调用底层的系统调用来实际执行操作。原创 2024-05-24 11:19:09 · 810 阅读 · 0 评论