自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 资源 (1)
  • 收藏
  • 关注

原创 软链接和硬链接

硬链接是指多个文件名指向同一个 inode(文件数据和元数据),所以它们共享相同的内容。软链接(Symbolic Link)是一个指向另一个文件或目录的符号链接。硬链接(Hard Link)是多个文件名指向同一个 inode 的链接。软链接是指一个文件名指向另一个文件的路径。硬链接和软链接在文件的详细信息中会有所不同。通过上述方法,您可以确定一个文件是硬链接还是软链接。要查看一个文件是硬链接还是软链接,可以使用。要创建软链接和硬链接,可以使用。例如,要创建一个名为。例如,要创建一个名为。

2024-04-23 23:42:32 231

原创 C程序的编译

经过预处理后的源文件,退去一切包装,注释被删除,各种预处理命令也基本上被处理掉,剩下的就是原汁原味的C代码了。接下来的第二步,就开始进入编译阶段。编译阶段主要分两步:第一步,编译器调用一系列解析工具,去分析这些C代码,将C源文件编译为汇编文件;第二步,通过汇编器将汇编文件汇编成可重定位的目标文件。

2024-04-13 22:03:36 746

原创 程序的预处理

编译器提供的这些预处理命令,大大方便了程序的编写:通过头文件包含可以实现模块化编程;通过#pragma预处理命令可以设定编译器的状态,指示编译器完成一些特定的动作。预处理过程,其实就是在编译源程序之前,先处理源文件中的各种预处理命令。编译器是不认识预处理指令的,在编译之前不先把这些预处理命令处理掉,编译器就会报错。我们写了一个测试程序,分别使用预处理命令去定义一些宏和条件编译。为了方便编程,编译器一般为开发人员提供一些预处理命令,使用#标识。自己可示例分析 查看example.i 文件.

2024-04-12 22:44:38 408

原创 从源程序到二进制

*BSS段比较特殊,**一般来讲,未初始化的全局变量和静态变量会放置在BSS段中,但是因为它们未初始化,默认值全部是0,其实没有必要再单独开辟空间存储,为了节省存储空间,所以在可执行文件中BSS段是不占用空间的。知道了可执行文件的基本构成,我们也就知道了程序编译的大概流程,如图所示,就是将C程序中定义的函数、变量,挑挑拣拣、加以分类,分别放置在可执行文件的代码段、数据段和BSS段中。每个section用一个section header来描述,包括段名、段的类型、段的起始地址、段的偏移和段的大小等。

2024-04-11 22:06:57 2272

原创 Cache机制

随着半导体工艺和芯片设计技术的发展,CPU的工作频率也越来越高,和CPU进行频繁数据交换的内存的运行速度却没有相应提升,于是两者之间就产生了带宽问题,进而影响计算机系统的整体性能。CPU执行一条指令需要零点几纳秒,而RAM则需要30纳秒左右,读写一次RAM的时间,CPU都可以执行几百条指令了。

2024-04-11 18:33:49 957

原创 计算机体系架构

当CPU到RAM中读数据时,内存RAM不是一次只传输要读取的指定字节,而是一次缓存一批数据到Cache中,等下次CPU再去取指令和数据时,可以先到这两个Cache中看看要读取的数据是不是已经缓存到这里了,如果没有缓存命中,再到内存中读取。为了兼顾存储和效率,计算机系统一般会采用内存+外存的存储结构:程序指令保存在诸如磁盘、NAND Flash、SD卡等外部存储器中,当程序运行时,相应的程序会首先加载到内存,然后CPU从内存一条一条地取指令、翻译指令和运行指令。我们编写的程序,除了指令,还有各种各样的数据。

2024-04-10 23:43:12 1736

原创 leetcode2529-正整数和负整数的最大计数

题目要求我们找出正整数和负整数的数量,并返回这两个数中的最大值。:这意味着数组中的元素从左到右是不减的,即每个后续元素都不小于其前一个元素。这个特性对于解题不是直接必要的,但它告诉我们数组是有序的。:对于数组中的每个元素,如果它大于0,我们就增加正整数的计数;:由于数组是非递减顺序排列的,我们可以简单地遍历一遍数组,对正整数和负整数分别计数。,并返回数组中正整数和负整数的最大数量。:我们不需要关心具体的正数或负数是什么,只需要知道它们的数量。:遍历完成后,我们比较正整数和负整数的数量,返回较大的那个。

2024-04-09 23:53:25 307

原创 可重入函数

可重入函数(Reentrant Function)是指该函数能够被多个任务或线程安全地调用,即使这些调用是并发执行的。一个可重入函数在任何时刻都可以被中断,然后由另一个任务或线程安全地执行,执行完成后,原来的任务或线程可以继续执行,而不会出现数据错误或不一致的情况。可重入函数对于实时操作系统(RTOS)和多线程环境非常重要,因为它们有助于避免并发执行时的数据冲突和不一致性问题。编写一个可重入函数需要遵循一些基本原则,以确保函数的安全性和稳定性,特别是在多线程或中断驱动的环境中。

2024-04-09 23:35:36 317

原创 Linux虚拟内存简介

若进程欲访问的页面目前并未驻留在物理内存中,将会发生页面错误(page fault),内核即刻挂起进程的执行,同时从磁盘中将该页面载入内存。该页表描述了每页在进程虚拟地址空间(virtual address space)中的位置(可为进程所用的所有虚拟内存页面的集合)。虚拟内存管理的最后一个优点是:由于每个进程使用的RAM减少了,RAM中同时可以容纳的进程数量就增多了。PMMU把要访问的每个虚拟内存地址转换成相应的物理内存地址,当特定虚拟内存地址所对应的页没有驻留于RAM中时,将以页面错误通知内核。

2024-04-09 23:19:07 1602

原创 Linux系统调用-PREAD

在Linux系统中,pread()函数是一个用于从文件中读取数据的系统调用,它与read()函数相似,但提供了一个额外的功能:它允许你在指定的偏移量处读取数据,而不改变文件的当前偏移量(文件指针的位置)。这使得pread()特别适用于多线程环境,因为它避免了对文件偏移量的共享和潜在的竞争条件。

2024-04-08 14:19:49 640

原创 原子操作和竞争条件

所有系统调用都是以原子操作方式执行的。之所以这么说,是指内核保证了某系统调用中的所有步骤会作为独立操作而一次性加以执行,其间不会为其他进程或线程所中断。原子性是某些操作得以圆满成功的关键所在。特别是它规避了竞争状态(race conditions)(有时也称为竞争冒险)。竞争状态是这样一种情形:操作共享资源的两个进程(或线程),其结果取决于一个无法预期的顺序,即这些进程1 获得 CPU 使用权的先后相对顺序。

2024-04-07 23:30:51 684

原创 linux系统调用-truncate 和ftruncate

truncate和ftruncate是两个用于修改文件大小的 POSIX 系统调用。它们允许你增大或减小一个文件的大小,如果文件被增大,新增的部分会被填充为零字节。这两个调用的主要区别在于它们指定操作文件的方式。

2024-04-06 17:12:52 483

原创 linux系统调用-PWRITE

pwrite()函数是一个系统调用,用于在指定偏移量处向文件写入数据。与write()函数相比,pwrite()的优势在于它可以直接在文件的指定位置写入数据,而不改变文件的当前偏移量。这对于多线程环境中的文件操作尤其有用,因为它避免了因修改共享的文件偏移量而导致的竞争条件。

2024-04-06 10:41:16 471

原创 linux系统临时文件-TMPFILE和MKSTEMP

在Linux中,使用临时文件是一种常见的做法,特别是当你需要存储大量数据或者不想影响文件系统的持久存储时。C语言提供了几种创建和使用临时文件的方法,包括使用tmpfile()函数和mkstemp()函数。

2024-04-05 16:41:20 481

原创 linux大文件IO

在Linux中处理大文件(通常指大小超过2GB的文件)时,需要使用特定的系统调用和标志,以确保程序能够正确地处理大文件的读写。这主要是因为在32位系统上,传统的文件偏移量和文件大小使用off_t类型表示,它通常是32位的,最大只能表示到2GB的文件大小。为了支持大文件,Linux提供了一套称为Large File Support(LFS)的接口。

2024-04-05 15:59:53 357

原创 linux系统调用-FCNTL

fcntl提供了对文件描述符的各种控制操作,比如改变已打开的文件的属性、复制文件描述符、设置文件锁等。fcntl的功能比较广泛,它可以用来实现多种不同的文件操作。

2024-04-05 15:32:54 688

原创 linux系统调用-IOCTL

在Linux系统中,ioctl函数是一种系统调用,用于对设备进行控制。它提供了一种执行设备特定操作的方法,这些操作通常无法通过标准输入/输出调用来完成。ioctl的名称来源于“输入/输出控制”(Input/Output Control)的缩写。

2024-04-05 13:51:14 453

原创 linux系统调用-LSEEK

lseek函数是Linux系统调用之一,用于重新定位文件内的读/写文件偏移量。这个函数允许文件的读写操作不必从文件开头开始,可以从文件的任意位置开始,这对于访问大文件或者进行文件内容的随机访问非常有用。

2024-04-05 13:37:55 494

原创 linux系统调用-CLOSE

Linux系统调用close函数用于关闭一个已经打开的文件描述符(file descriptor)。当一个文件描述符被关闭后,它将不再引用任何文件,且其值可以被后续的open系统调用重新使用。

2024-04-05 13:31:58 393

原创 linux系统调用-WRITE

Linux系统中的write函数是一个基本的系统调用,用于将数据写入文件或者其他输出流中。它是POSIX标准的一部分,因此在大多数类Unix操作系统中都可以找到它。write函数的原型定义在unistd.h头文件中。

2024-04-05 13:26:32 231

原创 linux系统调用--READ

read是Linux系统中用于从打开的文件、管道或者终端中读取数据的系统调用。它将数据从文件描述符指向的文件中读取到缓冲区中。

2024-04-04 20:04:22 360

原创 Linux系统调用–OPEN

open是Linux系统中用于打开和可能创建一个文件的系统调用。当你打开一个文件时,系统会返回一个文件描述符(file descriptor),这是一个非负整数,之后的读写操作都会使用这个文件描述符。

2024-04-04 19:48:11 390

原创 C 制作 静态库和动态库

C语言中 动态库和静态库的制作与使用

2024-04-03 14:14:37 717

原创 函数查表式调用

c语言函数查表调用

2024-04-03 10:00:53 321

原创 c语言的函数指针

c语言的函数指针的用法

2024-04-02 22:13:43 185

原创 c语言中结构体的大小

C语言结构体大小计算

2024-04-02 00:09:00 875

原创 C语言的短路现象

C语言中的短路现象

2024-04-01 23:41:12 660

原创 linux进程的相关基本概念

linux进程的相关基本概念1.1进程的定义进程是一个程序的一次执行过程,在这个过程中,伴随着资源的分配和释放。1.2操作系统的三个抽象文件:将所有的IO设备都抽象成文件进程:程序执行过程中的所有资源抽象成进程虚拟内存:隔离不同进程,操作系统会为每个进程分配独立的4G的虚拟空间1.3进程和程序的区别程序 program:可执行文件,存在硬盘,静态的概念进程 process:程序的...

2020-03-22 09:28:15 108

原创 Linux系统常用指令

Linux系统常用指令打开终端Terminal(快捷键ctrl + alt + t)Shell提供命令提示符表示该命令行的开始,用户在命令提示符后面输入命令,按下ENTER键表示提交命令。命令提示符的格式为:username@hostname:direction $/#其中:username:表示用户名,显示当前登陆用户的账号名hostname:表示主机名,显示当前登陆的主机名di...

2020-03-21 11:13:15 70

matlab 指纹处理识别代码

matlab 指纹处理识别代码

2024-06-02

QT学习资料,可以参考,免费下载

QT学习资料,可以参考,免费下载

2024-04-04

shell脚本编程 - A.pdf

shell脚本编程的简易教程 Shell 本身是一个用 C 语言编写的程序,它是用户使用 Unix/Linux 的桥梁,用户的大部分 工作都是通过 Shell 完成的。Shell 既是一种命令语言,又是一种程序设计语言。作为命令 语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参 数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。

2019-06-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除