自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 指针详解

数组指针是指针?还是数组?答案是:指针。我们已经熟悉:整形指针: int * pint;能够指向整形数据的指针。浮点型指针: float * pf;能够指向浮点型数据的指针。那数组指针应该是:能够指向数组的指针。举例说明://指针数组//数组指针int (*p2)[10]是p先和*结合,说明p是一个指针变量,然后指着指向的是一个大小为10个整型的数组。所以p是一个指针,指向一个数组,叫数组指针。这里要注意:[]的优先级要高于*号的,所以必须加上()来保证p先和*结合。

2023-08-15 10:59:36 74

原创 socket编程

端口号(port)是传输层协议的内容端口号是一个2字节16位的整数;端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理;IP地址 + 端口号能够标识网络上的某一台主机的某一个进程;一个端口号只能被一个进程占用。

2023-08-12 09:41:55 72 1

原创 网络基础概念

层状结构是一种很优秀的设计,它一定程度上实现了”解耦“,实现了解耦后,任何一层都可以进行替换,即便在某层中出现BUG,也可以将问题聚焦到指定的一层中,不会影响到其他层,例如语言层将语言由汉语切换到了英语,并不会影响到通信设备层,同理,通信设备层换了设备,也不会 影响到语言层。在网络中存在两种地址,一个是 IP 地址,一个是 Mac 地址。将远隔千里的计算机都连在一起,所谓 "局域网" 和 "广域网" 只是一个相对的概念. 比如, 我们有 "天朝特色" 的广域网, 也可以看做一个比较大的局域网.

2023-08-05 11:29:39 77 1

原创 进程信号

main函数调用insert函数向一个链表head中插入节点node1,插入操作分为两步,刚做完第一步的 时候,因 为硬件中断使进程切换到内核,再次回用户态之前检查到有信号待处理,于是切换 到sighandler函 数,sighandler也调用insert函数向同一个链表head中插入节点node2,插入操作的 两步都做完之后从 sighandler返回内核态,再次回到用户态就从main函数调用的insert函数中继续 往下执行,先前做第一步 之后被打断,现在继续做完第二步。

2023-07-31 17:01:54 93 1

原创 进程间通信(共享内存实现)

ftok函数的作用就是,将一个已存在的路径名pathname和一个整数标识符proj_id转换成一个key值,称为IPC键值,在使用shmget函数获取共享内存时,这个key值会被填充进维护共享内存的数据结构当中。需要注意的是,pathname所指定的文件必须存在且可存取。我们把具有标定某种资源能力的东西叫做句柄,而这里shmget函数的返回值实际上就是共享内存的句柄,这个句柄可以在用户层标识共享内存,当共享内存被创建后,我们在后续使用共享内存的相关接口时,都是需要通过这个句柄对指定共享内存进行各种操作。

2023-07-27 11:57:27 247 1

原创 进程间通信(管道实现)

数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止 时要通知父进程)。进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另 一个进程的所有陷入和异常,并能够及时知道它的状态改变。管道是Unix中最古老的进程间通信的形式我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”

2023-07-26 19:40:35 100 1

原创 动静态库

如果不加-fPIC选项,则加载.so文件的代码段时,代码段引用的数据对象需要重定位,重定位会修改代码段的内容,这就造成了每个使用这个.so文件代码段的进程在内核里都会生成这个.so文件代码段的拷贝,并且每个拷贝都不一样,取决于这个.so文件代码段和数据段内存映射的位置。因此,在这里我们可以将add.h和sub.h这两个头文件放到一个名为Include的目录下,将生成的静态库文件libmymath.a放到一个名为lib的目录下,然后将这两个目录放到myliba下,此时就可以将myliba给别人使用了。

2023-07-23 19:38:33 44

原创 基础 I/O

open系统接口中使用open函数打开文件,open函数的函数原型如下要打开或创建的目标文件打开文件时,可以传入多个参数选项,用下面的一个或者多个常量进行“或”运算,构成flags。参数:O_RDONLY: 只读打开O_WRONLY: 只写打开O_RDWR : 读,写打开以上这三个常量,必须指定一个且只能指定一个打开文件时,可以传入多个参数选项,当有多个选项传入时,将这些选项用“或”运算符隔开。O_CREAT : 若文件不存在,则创建它。需要使用mode选项,来指明新文件的访问权限。

2023-07-21 11:53:37 59 1

原创 进程控制

这时我们便可以看到父进程同时创建多个子进程,当子进程退出后,父进程再依次读取这些子进程的退出信息,只有当前等待的子进程退出后才会开始读取下一个子进程信息。实际上我们可以让父进程不要一直等待子进程退出,而是当子进程未退出时父进程可以做一些自己的事情,当子进程退出时再读取子进程的退出信息,即非阻塞等待。父进程每隔一段时间就去查看子进程是否退出,若未退出,则父进程先去忙自己的事情,过一段时间再来查看,直到子进程退出后读取子进程的退出信息。(查看进程的退出码)最后,父进程派给子进程的任务完成的如何,我们需要知道。

2023-07-05 21:03:22 60 1

原创 进程地址空间

可以看到代码区的地址是最小的,依次向上递增,其中,堆栈相对而生。栈向地址减小方向生长,堆向地址增大方向生长。堆栈之间的区域称为共享区代码段不是从0号地址开始的,它有一个确定的地址共享区里一般放的是动态库,共享内存等。

2023-06-18 14:50:16 26

原创 环境变量

如果是新增某个环境变量,可以不要$ [环境变量名称],直接export 环境变量名称=[新添加的环境变量的内容];环境变量的本质就是一张内存级的一张表,,这张表有用户登录系统的时候,进行给特定用户形成属于自己的环境变量表,每一个环境变量够有自己特定的应用场景,且每一个环元素的结构都是key_value形式的。我们一般在执行自己的可执行程序是,都需要在前面加上./符号,这是因为我们要告诉bash,要执行的程序在哪里, ./就是告诉bash可执行程序就在当前路径下。第二部分是环境变量的值,也就是第三个参数。

2023-06-17 10:11:59 41

原创 操作系统及进程概念

系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统 调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。当父进程定义了一个全局变量,fork出来一个子进程,当子进程发生对该全局变量发生修改的时候,操作系统会开辟一段空间来保存子进程更改后的值,并且子进程会更改自己的页表映射关系。从上面可以看出,在子进程还在运行的情况下,kill掉父进程,此时子进程就变成了孤儿进程,对应的也会被 1 号进程进行领养。

2023-06-10 16:32:51 41

原创 gdb的基本使用

next简写为n(对应Windows下的F10) ,step简写为 s(对应Windows下的F11)。display 变量名:跟踪查看一个变量(长显示),每次停下来都显示它的值 ,对应的undisplay:取消对先前设置的那些变量的跟踪。要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项,也可在命令后加上语言标准。命令的运行结果如下所示,该结果显示已经加载了这个文件,并且使用了系统库文件。print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数。

2023-06-07 17:07:18 1436 1

原创 gcc/g++使用

我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而 没有定义函数的实现,那么,是在哪里实“printf”函数的呢?3. 如果test文件不存在,或是hello所依赖的后面的test.o文件的文件修改时间要比test这个文件新,那么,他就会执行后面所定义的命令来生成test这个文件。7. 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错, 而对于所定义的命令的错误,或是编译不成功,make根本不理。

2023-06-07 16:05:39 39 1

原创 vim 的基本使用命令

vim可以直接用键盘上的光标来上下左右移动,但正规的vim是用小写英文字母「h」、「j」、「k」、 「l」,分别控制光标左、下、上、右移一格。当处于插入模式下时,就只能一直输入文字,想要进行删除等操作,需要先按「ESC」键回到命令模式然后再进行操作。「#(数字)+ x」:例如,「6x」表示删除光标所在位置的“后面(包含自己在内)”6个字符。【shift +;「#(数字)+ X」:例如,「20X」表示删除光标所在位置的“前面”20个字符。「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符。

2023-05-31 20:08:05 3186 1

原创 Linux基本权限(二)目录权限及粘滞位

可执行权限(x):如果目录没有可执行权限,则无法cd到目录中可读权限 (r) : 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.可写权限 (w) : 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件可以看到,当失去了x权限之后便无法cd进入到该目录下。

2023-05-19 22:33:22 86 1

原创 操作符详解

| 逻辑或 (两者其中一个为真,结果就为真,两者都为假,结果为假)按位或 | 是将两个数的二进制位分别按位进行逻辑 | 运算(全0出0,有1出1)-- 前置--(先--再使用)、后置--(先使用再--)按位与&是将两个数的二进制位分别按位进行逻辑&运算(全1出1,有0出0)&& 逻辑与 (两者都为真,结果为真,有一个为假,结果就是假)若exp1表达式为真,则则返回exp2的值,为假则返回exp3的值。: 对于移位运算符,不要移动负数位,这个是标准未定义的。

2023-05-09 17:08:50 36

原创 Linux基本权限(一)

通过ls -l可以查看文件或目录的信息,包括文件的权限,就像下面的权限"drwxr-xr-x",通常把这十位叫做权限位,那么这十一位表达的含义是什么呢。有字母则表示有相应的权限,"-"则表示没有这种权限。对人的限制就是限制人能做什么,就好比某些视频软件的VIP用户与非VIP用户一样,VIP特属的视频限制了非VIP用户的访问。chmod命令的权限模式的格式“[用户身份][赋予方式(+增加 或 - 减去以及 = 设置权限)][权限]”的格式。常用选项:-R 递归设置权限,也就是给子目录中的所有文件都设置权限。

2023-05-06 23:14:18 241 1

原创 扫雷(递归版)

实现扫雷首先需要布置雷盘,在这里我们需要两个二维数组来实现,一个mine数组来存储雷,一个show数组来存放玩家看到的雷盘,两个个 数组搭配使用,便可计算某个位置周围的雷数,然后修改show来进行显示。玩家排雷这里首先需要计算玩家输入的坐标周围有多少雷,将坐标周围的字符相加减去8 * ‘0’便可获取周围雷数(数字字符减去‘0’等于实际数值;将雷布置到mine数组里,采用‘0'表示没有雷‘1’表示有雷的方法(方便后面计算某位置周围的雷数);将show数组初始化为‘*’,mine数组初始化为‘0’

2023-05-03 21:17:18 152

原创 三子棋小游戏(c语言实现)

由于数组是以0开头的,与玩家们平时的认知不同,所以实现时要将输入的行和列的值减1,让棋盘可以从1开始。胜负判定需要玩家或电脑每下一次就判定一次,来确保程序的逻辑正确性;接下来是棋盘打印,这个可以根据自己的喜好来设置,根据控制二维数组的行和列呈现不同的效果。落子的位置是否超出棋盘或位置已经被占用,可以通过两个if语句控制落子的位置,以上就是三子棋游戏的全部内容,希望对大家能有所帮助,如有错误,还请指正。通过取模操作符来让电脑生成的随机数不超出棋盘的范围。3:最后是游戏整体逻辑以及菜单和主函数的实现。

2023-05-01 16:55:35 44 1

原创 递归经典问题:汉诺塔

大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。最好的方法就是画一下递归展开图,将每次递归时传参的值和结束时返回的值标出来(自己画的递归展开图太丑了,就去别的地方copy了一张),如有错误,还请指正。注:使用递归函数最重要的是要有一个递归中止条件,不然会出现死递归的现象。3: 将B的n-1个盘子借助A移动到C上。1:将A的n-1个盘子借助C移动到B上,

2023-04-30 20:59:27 133 1

空空如也

空空如也

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

TA关注的人

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