Linux 系统编程
文章平均质量分 65
@新法
西安计科大三菜鸟一枚
展开
-
探索 Linux 下的内存映射(mmap):原理、应用与实践
本文将深入探讨 Linux 操作系统下的内存映射技术(mmap),从基本原理到实际应用,全方位介绍 mmap 在系统编程中的重要性和灵活性。我们将解释 mmap 的工作原理,探讨它在提高 I/O 性能、共享内存、进程间通信等方面的应用,以及如何在实际项目中正确、高效地使用 mmap。无论您是系统编程新手还是有经验的开发者,本文都将为您提供深入理解 mmap 的视角和实用技巧。原创 2024-03-07 10:44:08 · 2398 阅读 · 0 评论 -
深入了解惊群问题:Accept、Epoll及Nginx的优化策略
惊群现象是在多进程/多线程并发编程中出现的一种性能问题。它通常发生在多个进程或线程等待某个事件的时候,当这个事件发生时,所有等待的进程或线程都被唤醒,即使只有一个进程或线程实际上需要处理这个事件。这种情况导致了额外的资源竞争、消耗和性能下降。原创 2023-12-16 19:13:53 · 1254 阅读 · 0 评论 -
深入探究Linux守护进程:释放你的代码力量!
你的代码不只是运行在终端背后,它可以在Linux系统中默默发挥巨大作用。本文将带你探索Linux守护进程的神奇世界。从创建到管理,学会利用守护进程将任务高效地放置在后台,释放你代码的力量,让你的应用焕发更强大的活力。迈出这一步,让你的代码在系统中轻盈而自信地运行,享受守护进程带来的无限可能性!原创 2023-12-16 19:12:36 · 658 阅读 · 0 评论 -
精准定时任务管理:探究Linux下timerfd与epoll的默契
Linux 提供了强大的工具,timerfd 和 epoll,它们的结合为高效的定时任务处理提供了机会。本文深入探讨了 timerfd 的创建和配置,以及如何通过 epoll 实现异步处理定时器事件。从网络编程到性能监控,timerfd 和 epoll 的联合应用为实时系统和多任务调度带来新的可能性。探索这个默契组合,优化你的Linux编程体验!原创 2023-12-15 16:08:39 · 1131 阅读 · 0 评论 -
掌握文件控制:深入解析 Linux fcntl 函数
在Linux系统中,文件控制是开发者必备的技能之一。这篇博客将带你深入探索Linux中强大的文件控制函数fcntl,从基础到高级应用,解析其各种参数、用法及示例。了解如何通过fcntl函数实现对文件的灵活管理,从修改文件属性到实现文件锁定,助你在文件操作中游刃有余。原创 2023-12-14 18:25:26 · 991 阅读 · 1 评论 -
Linux获取文件信息的利器stat,fstat,lstat,fstatat
stat系列函数是C语言中的一个系统调用函数,用于获取文件的信息。通过提供文件路径,它能够返回包含文件属性的结构体数据。原创 2023-12-13 17:30:09 · 1452 阅读 · 0 评论 -
Linux 零拷贝splice函数
splice是 Linux 系统中用于在两个文件描述符之间移动数据的系统调用。它的主要作用是在两个文件描述符之间传输数据,而无需在用户空间进行数据拷贝。也是零拷贝操作.原创 2023-11-19 22:57:18 · 825 阅读 · 0 评论 -
Linux 零拷贝sendfile函数
sendfile函数允许在两个文件描述符之间直接传输数据,而无需将数据从内核空间复制到用户空间再发送。它在 Linux 系统上首次出现于 2.2 内核版本。效率很高,这被称为零拷贝。out_fd是输出文件描述符,通常是网络套接字描述符。in_fd是输入文件描述符,通常是打开的文件或套接字。offset是一个指向 off_t 类型的指针,用于指定从输入文件的哪个位置开始传输数据。如果为NULL,则从当前文件偏移量开始传输。count是要传输的字节数。原创 2023-11-19 22:55:11 · 731 阅读 · 0 评论 -
Linux文件描述符和文件指针互转
文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统。FILE *指针变量标识符;其中FILE应为大写,它实际上是由系统定义的一个结构,该结构中含有文件名、文件状态和文件当前位置等信息。在编写源程序时不必关心FILE结构的细节。原创 2023-10-29 21:57:45 · 589 阅读 · 0 评论 -
Linux文件描述符和打开文件之间的关系
文件描述符和打开的文件之间似乎呈现出一一对应的关系。然而,实际并非如此。多个文件描述符指向同一打开文件,这既有可能,也属必要。这些文件描述符可在相同或不同的进程中打开。要理解具体情况如何,需要查看由内核维护的 3 个数据结构。进程级的文件描述符表。系统级的打开文件表。文件系统的 i-node 表。上述讨论揭示出如下要点。两个不同的文件描述符,若指向同一打开文件句柄,将共享同一文件偏移量。原创 2023-10-26 19:59:15 · 779 阅读 · 0 评论 -
Linux创建临时文件mkstemp()tmpfile()
有些程序需要创建一些临时文件,仅供其在运行期间使用,程序终止后即行删除。很多编译器程序会在编译过程中创建临时文件。GNU C 语言函数库为此而提供了一系列库函数。(之所以有“一系列”的库函数,部分原因是由于这些函数分别继承自各种 UNIX 实现。)本节将介绍其中的两个函数:mkstemp()和 tmpfile()。原创 2023-10-25 18:19:30 · 242 阅读 · 0 评论 -
Linux进程与线程的内核实现
task_struct称为进程描述符结构,该结构定义在文件中。进程描述符中包含一个具体进程的所有信息进程描述符中包含的数据能完整地描述一个正在执行的程序:它打开的文件,进程的地址空间,挂起的信号,进程的状态等原创 2023-10-22 18:40:55 · 1081 阅读 · 0 评论 -
常见进程控制函数记录
进程控制函数记录原创 2023-10-21 18:57:21 · 556 阅读 · 0 评论 -
Linux截断文件truncate和ftruncate
truncate()和 ftruncate()系统调用将文件大小设置为 length 参数指定的值。原创 2023-10-18 20:04:57 · 740 阅读 · 0 评论 -
C语言malloc与free实现原理
malloc()的实现很简单。它首先会扫描之前由 free()所释放的空闲内存块列表,以求找到尺寸大于或等于要求的一块空闲内存。(取决于具体实现,采用的扫描策略会有所不同。例如,first-fit 或 best-fito。)如果这一内存块的尺寸正好与要求相当,就把它直接返回给调用者。如果是一块较大的内存,那么将对其进行分割,在将一块大小相当的内存返回给调用者的同时,把较小的那块空闲内存块保留在空闲列表中。 如果在空闲内存列表中根本找不到足够大的空闲内存块,那么 malloc()会调用 sbrk()以分配更多原创 2023-10-18 18:57:15 · 758 阅读 · 0 评论 -
Linux在文件特定偏移量处读写pread和pwrite
系统调用 pread()和 pwrite()完成与 read()和 write()相类似的工作,只是前两者会在 offset 参数所指定的位置进行文件 I/O 操作,而非始于文件的当前偏移量处,且它们不会改变文件的当前偏移量。原创 2023-10-17 20:34:35 · 827 阅读 · 0 评论 -
Linux alloca函数栈动态内存分配
Linux C提供了在**栈中动态分配内存**的函数`alloca`,用法和`malloc`一样,但不用`free`,因为他是在栈中分配空间,超出定义域后自动释放原创 2023-10-17 20:14:05 · 818 阅读 · 0 评论 -
Linux文件空洞与fallocate快速创建大文件
在UNIX文件操作中,文件位移量可以大于文件的当前长度,在这种情况下,对该文件的下一次写将延长该文件,并在文件中构成一个空洞,这一点是允许的。位于文件中但没有写过的字节都被设为 0。如果 offset 比文件的当前长度更大,下一个写操作就会把文件“撑大(extend)”。这就是所谓的在文件里创造“空洞(hole)”。没有被实际写入文件的所有字节由重复的 0 表示。空洞是否占用硬盘空间是由文件系统(file system)决定的。大部分文件系统是不占用的。原创 2023-10-16 21:44:39 · 821 阅读 · 0 评论 -
Linux io多块读写readv函数和writev函数
fd参数是被操作的目标文件描述符。iov参数的类型是iovec结构数组,该结构体描述一块内存区。iovcnt参数是iov数组的长度,即有多少块内存数据需要从fd读出或写到fd。readv和writev在成功时返回读出/写入fd的字节数,失败则返回-1并设置errno。readv函数将数据从文件描述符读到分散的内存块中,即分散读;writev函数则将多块分散的内存数据一并写入文件描述符中,即集中写。原创 2023-10-15 20:59:04 · 732 阅读 · 1 评论 -
Linux dup函数文件重定向
dup函数创建一个新的文件描述符,该新文件描述符和原有文件描述符file_descriptor指向相同的文件、管道或者网络连接。并且dup返回的文件描述符总是取系统当前可用的最小整数值。dup2和dup类似,不过它将返回第一个不小于file_descriptor_two的整数值。dup和dup2系统调用失败时返回-1并设置errno。有时我们希望把标准输入重定向到一个文件,或者把标准输出重定向到一个网络连接(比如CGI编程)。原创 2023-10-15 20:56:39 · 655 阅读 · 1 评论 -
Linux进程间的通信万字总结大全
POSIX(Portable Operating System Interface for Computing Systems)是由IEEE 和ISO/IEC 开发的一簇标准。该标准是基于现有的UNIX 实践和经验,描述了操作系统的调用服务接口,用于保证编制的应用程序可以在源代码一级上在多种操作系统上移植运行。它是在1980 年早期一个UNIX 用户组(usr/group)的早期工作的基础上取得的。该UNIX 用户组原来试图将AT&T 的系统V 和Berkeley CSRG的BSD 系统的调用接口之间的区别原创 2023-10-08 21:19:02 · 808 阅读 · 1 评论