自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 网编day1

netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。:在服务器中,0.0.0.0指的是本机上的所有IPV4地址,如果一个主机有两个IP地址,192.168.1.1 和 10.1.2.1,并且该主机上的一个服务监听的地址是0.0.0.0,那么通过两个ip地址都能够访问该服务。TCP/IP协议被集成到操作系统的内核中,引入了新型的“I/O”操作 ----->进行网络通信的两个进程在不同的机器上,如何连接?

2025-04-16 20:37:59 608

原创 IO进程day5

写阻塞--》阻塞情况比较少,主要发生在写入的缓冲区的大小小于要写入的数据量的情况下,写操作不进行任何拷贝工作,将发生阻塞,一旦缓冲区有足够的空间,内核将唤醒进程,将数据从用户缓冲区拷贝到相应的发送数据缓冲区。在同一个线程中,如果想要多次获得一个锁,只能使用递归锁,递归锁是不被提倡的,用到递归锁说明这个代码设计是有问题的,有些逻辑特别混乱或涉及三方开发对外提供服务不得已时,再用递归锁。pthread_cond_wait:阻塞等待条件产生,没有条件产生时阻塞,同时解锁,当条件产生时结束阻塞,再次上锁。

2025-04-16 20:35:42 995

原创 IO进程day4:消息队列+线程+信号量

信号量代表某一类资源,其值表示系统中该资源的数量,信号量值>0,表示有资源可以用,可以申请到资源,继续执行程序,信号量值<=0,表示没有资源可以用,无法申请到资源,阻塞。进程与程序的区别、进程的特点、转化图、fork、wait、waitpid、exit, _exit, getpid, getppid,通过线程实现数据的交互,主线程循环从终端输入,线程函数将数据循环输出,当输入quit结束程序。共享的资源:可执行的指令、静态数据、进程中打开的文件描述符、信号处理函数、当前工作目录、用户ID、用户组ID。

2025-04-16 20:33:28 636

原创 IO进程Day3:进程+信号+共享内存

2)捕捉信号:定义信号处理函数,当信号发生的时候,执行相应的处理函数,但是有两个信号不能做捕捉处理:SIGKILL和SIGSTOP。管道基于文件描述符进行通信。:也称为非实时信号,不支持排队,信号可能会丢失,比如发送多次相同的信号,进程只能收到一次,信号值取值区间为1~31。14)SIGALRM:闹钟信号,alarm函数设置定时,当到设定的时间时,内核会向进程发送此信号结束进程。:也称为实时信号,支持排队,信号不会丢失,发多少次,就可以收到多少次,信号值取值区间为32~64。

2025-04-10 19:45:10 707

原创 IO进程day2:文件IO+库+进程

该类进程经常与用户进行交互,需要等待用户的输入,当接收到用户的输入后,该类进程会立刻响应,典型的交互式进程有:shell命令进程、文本编辑器等。CPU调度进程时会为进程分配时间片(几毫秒-十几毫秒之间),当时间片用完之后,CPU会再进行其他进程的调度,实现进程的轮转,进而实现多任务操作。子进程几乎拷贝了父进程的所有内容,包括代码、数据、缓冲区,系统中的值,栈中的数据,父进程中打开的文件,但是PID与PPID不同。若父进程先结束,子进程会变成孤儿进程,会被init进程收养,会变成后台进程。

2025-04-09 19:43:44 1017

原创 IO进程day1:标准IO

标准IO默认打开了三个流,stdin(标准输入)、stdout(标准输出)、stderr(标准错误)2)按照二进制的方式读写fread fwrite:一般只操作二进制文件。通过fgets实现"wc -l 文件名"命令功能(计算文件行数)程序正常结束:return(main),exit。程序正常结束:return(main),exit。1)按照字符串读写fgets fputs。计算缓冲区大小:1024b--》1kb。fclose关闭对应的流。fclose关闭对应的流。关闭文件fclose。

2025-04-09 19:41:53 233

原创 数据结构 Day6

二叉树(Binary Tree)是n(n≥0)个节点的有限集合,它或者是空集(n=0), 或者是由一个根节点以及两棵互不相交的、分别称为左子树和右子树的二叉树组成。有n个节点的完全二叉树可以用有n+1 个元素的数组进行顺序存储,节点号和数组下标一一对应,下标为零的元素不用。度数2的n2:度数为2 那么度数为2节点的子节点共有 2*n2 子节点。度数1的n1:度数为1 那么度数为1节点的子节点共有 n1 个子节点。节点层次:根节点的层次为1,根节点子树的根为第2层,以此类推。

2025-04-09 19:37:10 612

原创 数据结构 Day5

将新节点的 prior 指针指向直接前驱节点。将直接前驱节点的 next 指针指向新节点。6.2. 双向链表相关的操作。删除双向链表指定位置的数据。删除双向链表中指定的数据。6.3. 双向循环链表。判断双向链表是否为空。清空双向链表中的数据。

2025-04-09 19:35:59 215

原创 数据结构 Day4

答:N-1个,rear 后面 队尾,在插入的时候,插入之前需要先判断 rear+1,也就是他的下一个为位置是否 等于 front 来判断队列是否为满,会造成浪费一个存储位置。注意:为了避免假溢出问题,即队列前面还有空闲,但是队尾已经出现越界,所以在实际使用队列时,为了使队列空间能重复使用,往往对队列的使用方法稍加改进,需要引入。队列是只允许再两端进行插入和删除操作的线性表,在队尾插入,在队头删除,插入的一段被称为“队尾”,删除的一端被称为“队头”。操作:创建、入列、出列、判断是否为空、判断是否为满、清空。

2025-04-09 19:35:15 359

原创 数据结构 Day3

在此基础上,如果想取出元素 1,根据“先进后出”的原则,必须先依次将元素 4、3、2 出栈,最后才能轮到元素 1 出栈。约瑟夫环问题,是一个经典的循环链表问题,题意是:已知 n 个人(分别用编号 1,2,3,…将头节点与当前链表断开,断开前保存下头节点的下一个节点,保证后面链表能找得到,定义一个q保存头节点的下一个节点,断开后前面相当于一个空的链表,后面是一个无头的单向链表。遍历无头链表的所有节点,将每一个节点当做新节点插入空链表头节点的下一个节点(每次插入的头节点的下一个节点位置)。

2025-04-09 19:33:05 924

原创 数据结构 Day2

写一个有头单项链表,用于保存输入的学生成绩,实现一输入学生成绩就创建一个新的节点,将成绩保存起来。再将该节点链接到链表的尾,直到输入-1结束。和顺序表不同同,使用链表存储数据,不强制要求数据在内存中集中存储,各个元素可以分散存储在内存中。链表又称单链表、链式存储结构,用于存储逻辑关系为“一对一”的数据。在顺序表中间插入或删除元素时都涉及到元素的移动,效率较低。有头单向链表,存在头节点,头节点数据域无效,指针域有效。无头单向链表,每一个节点的数据域和指针域都有效。可以查找元素,高效的按下标进行操作。

2025-04-09 19:30:04 403

原创 数据结构 Day1

线性表是最基本、最简单、也是最常用的一种数据结构,可以存储逻辑关系为线性的数据。线性表:顺序表(数组)、链表(单向链表、单向循环链表、双向链表、双向循环链表)、栈(顺序栈、链式栈)、队列(循环队列、链式队列)包含:顺序表(数组)、链表(单向链表、单向循环链表、双向链表、双向循环链表)、栈(顺序栈、链式栈)、队列(循环队列、链式队列)如果有常数项,将其置为1 //当f(n)的表达式中只有常数项的时候,例如f(n)=8 ==> O(1)int sum = n*(n+1)/2 // 当n=100 重复执行一次。

2025-04-09 19:28:07 865

原创 Linux高级,C高级 Day6

获取到 main.c fun.c字符串,根据模式匹配,得到 main.o fun.o 字符串每一个参数之间以逗号作为分隔,要替换的字符串之间以空格作为分隔。所以通过 make 工具,可以查找到修改过的文件(根据时间戳),只对修改过的文件进行编议,这样大大的减小的编译时间,提高编译效率。因为内置函数是帮助程序员查找文件信息的,所以要求在查找路径下,只要程序需要的.c文件,没有其他程序的.c文件。%:是一种(字符串的)模式匹配,在Makefile中的作用是,有一个.o,就匹配一个同名的.c。

2025-04-09 19:24:51 606

原创 Linux高级,C高级 Day5

shell脚本编程:将shell命令结合按照一定逻辑集合到一起,写到一个 .sh 文件,实现一个或多个功能,这个脚本文件不用编译直接执行。read -t 秒数 变量 ---> 如果用户n秒不输入,就结束输入向后执行语句。read -n 个数 变量名 ---> 如果输入n个字符,自动停止。$* 或者 $@ ---> 获取所有外部参数(不包含脚本名)${n} ---> n:大于等于10 的数:如 ${11}$# ---> 获取所有外部参数的个数(不包含脚本名)

2025-04-09 19:23:31 960

原创 Linux高级,C高级 Day4

Ext3、VFAT、ISO9660(通常是CD-ROM)、UFS(Unix File System,Unix文件系统)、ReiserFS、XFS、JFS、FAT(File Allocation Table,文件分配表)、FAT16、FAT32、NTFS(New Technology File System)等;较小的Nice值表示进程的优先级较高,而较大的Nice值表示进程的优先级较低。sudo userdel -r 用户名 ---> 删除用户的同时,删除用户的主目录。

2025-04-07 19:31:09 659

原创 Linux高级,C高级 Day3

用 file_[a-e].txt,能匹配file_a.txt、file_b.txt、file_c.txt、file_d.txt、file_e.txt。用file_*.txt,匹配file_aa.txt、file_bbbb.txt能匹配到的, file3_11.txt 则匹配不到。用 file_[^abc].txt,除了file_a.txt、file_b.txt、file_c.txt的其他文件都可以。用 file_[abc].txt,只能匹配file_a.txt、file_b.txt、file_c.txt。

2025-04-07 19:27:06 640

原创 Linux高级,C高级 Day2

我的理解:枚举类型就是将一些比较固定的值一一列举出来,比如一年有十二个月,一个礼拜有七天,这是毫无疑问的,就可以将这些月份天数用常量来代替。枚举类型和宏定义是差不多的,只有细微区别,宏运行是在预处理阶段完成的,枚举类型是在与编译阶段完成的。维基百科的理解:枚举类型用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。方便、扩展性强,只需要一个 test 函数,可以实现不同的功能,这就是"多态"的特性,-------------系统调用----------------

2025-04-07 19:22:41 595

原创 Linux高级,C高级 Day1

在实际使用中,访问特定数据类型变量时需要在特定的内存起始地址进行访问,这就需要各种数据类型按照一定的规则在空间上进行排列,而不是顺序地一个接一个地存放,这就是字节对齐。而对齐的内存访问仅需要一次访问。在64位系统下默认的value值为8字节,判断结构体类型中最大成员变量的字节大小,和默认的value值进行比较,按小的数进行对齐。第一步:找出成员变量的大小,让其与编译器的默认的对齐数进行比较,取较小的值作为该成员变量的对齐数。不能把结构体类型变量作为整体引用,只能对结构体类型变量中的成员变量分别引用。

2025-04-07 19:19:33 895

原创 C语言编程基础 Day10

想想之前我们定义的所有数组,因为其语法约束,我们必须得明确"指出"空间大小.但是如果用动态内存申请(malloc)因为malloc是函数,而函数就可以传参,也就意味着,我们可以通过具体的情况,对需要的内存大小进行动态计算,进而在传参申请,提供了很大的灵活性。<1>在技术方面,普通的空间申请,都是在全局或者栈区,全局一般不太建议大量使用,而栈空间有限,那么如果一个应 用需要大量的内存空间的时候,需要通过申请堆空间来支持基本业务。比较前n个字符的大小。存在限制条件,当满足这个限制条件的时候,递归便不再继续。

2025-04-07 19:15:30 858

原创 C语言编程基础 Day9

/ a数组名:第一行的首地址,a+1:第二行首地址。若有程序段:int a[2][3],(*p)[3];则对a数组的第i+1行第j+1列元素值的正确引用是。*(*(a+i)+j) :拿到i+1行j+1列的元素 拿到的是每一行每一列的元素。*(a[i]+j) :拿到i+1行j+1列的元素 拿到的是每一行每一列的元素。a[i][j] :拿到i+1行j+1列的元素 拿到的是每一行每一列的元素。若有定义:int a[5],*p=a;

2025-04-07 19:06:18 975

原创 C语言编程基础 Day8

强转:(int *)p 取内容:*(int *)p。Little-Endian(小端字节序)小端:在低地址存放低字节数据,在高地址存放高字节数据。指针类型根据指针变量指向空间的数据类型(指针变量的数据类型取决于它保存的地址是什么样子的)// 修饰p,指针指向不能被改变,指针指向的内容可以更改。思路:定义两个指针分别指向字符串的开头和结尾,前面的指针向后走,后面的指针向前走。p+n:向高地址方向访问第n个数据的地址,指针指向不发生改变。p-n:向低地址方向访问第n个数据的地址,指针指向不发生改变。

2025-04-07 19:03:57 848

原创 C语言编程基础 Day7

首先通过n-1次比较,从n个数中找出最小值的下标,将它与第一个数交换,第一轮选择排序,结果最小值被放在第一个元素的位置上。再通过n-2次比较,从剩余的n-1个数中找出最小值的下标做记录,将它与第二个数交换,第二轮排序。第一轮: i = 0 n个数:比较n-1轮,每一轮交换的次数是n-1次开始依次递减的。数组名[行下标][列下标];arr[0][0]:第一行第一列的元素。

2025-04-07 19:00:32 491

原创 C语言编程基础 Day2

auto(自动型)、static(静态型)、extern(外部引用)、register(寄存器型)char(字符型)、int(整型)、float(单精度浮点类型)、double(双精度浮点类型)long(长整型)、short(短整型)、signed(有符号)、unsigned(无符号)表达式1是判断条件,如果条件为真,执行表达式2,否则执行表达式3。一般用在条件语句中,如果为真,值是非0,如果为假,值是0。//先取值再自加 b=1 a=2。分号、逗号、单引号、双引号、()、{}、[]、<>

2025-04-07 18:53:27 883

原创 C语言编程基础 Day6

输入字符串不能含有空格*,因为scanf输入字符串遇到空格或者 \n 都会认为字符串输入结束,空格后面就不能再存放到数组里面。// 逐个字符的赋值,sizeof(c) == 3。// 用字符串赋值, sizeof(str) == 6。// 用字符串赋值, sizeof(str) == 6。数组名:代表数组首元素的首地址,arr是地址常量,不能被赋值,不能为左值。// 大小是,随便放一个东西就会越界。// 这样是不可以的,会报一个没有数组大小。

2025-04-07 18:50:49 521

原创 C语言编程基础 Day5

执行顺序:首先执行表达式1,判断表达式2是否成立,成立则执行语句块,再次执行表达式3,再判断表达式2是否成立,依次循环,直到表达式2条件为假循环结束。循环输入一个5位数,判断它是不是回文数。执行顺序:先执行循环体(语句块),再判断条件是否为真,如果为真继续执行循环,条件为假循环结束。做过的练习重新做一遍,总结思路,手写,发群里(针对练习做的不是很好的同学)执行顺序:外层循环执行一次,内层循环执行到终止条件结束,再次执行外层循环。执行顺序:首先判断条件是否为真,如果真则执行语句块,当条件为假时循环结束。

2025-04-07 18:42:17 297

原创 C语言编程基础 Day4

编写程序实现功能:读入两个整数(data1和data2)和一个运算符(op),计算表达式data1 op data2 的值,其中op可以为+、-、*、/四个符号中的任一种(用switch语句实现)练习:一个水分子的质量约为3.0*10^-23g,1夸脱水大约有950g,编写一个程序,要求输入水的夸脱数,然后显示这么多水中包含多少水分子。执行顺序:判断switch后的表达式或变量,和case项进行匹配,如果匹配成功,则执行对应的语句块,否则执行default后面的语句块。录制:华清远见李老师的个人会议室。

2025-04-07 18:41:03 565

原创 C语言编程基础 Day3

scanf输入数据时,第一个参数是字符串,指定输入数据的格式,其中不能包含\n或其他任意字符;(富士安全,广域科技,华辰泰尔,鲁科安全,神戎电子,中安云科,中维世纪,晟安信息,苏州特点电子科技)%-m.nf,m代表是位宽,n小数点后的位数,-代表是左对齐,默认是右对齐。u打印,会默认将有符号转为无符号,最高位不在表示符号位,而是实际的数据位。特点:原样替换(不要直接计算结果,表达式是什么就直接替换)写一个"标准"宏MIN,这个宏输入两个参数并返回较小的一个。如果m<实际数据的宽度,按照实际宽度输出。

2025-04-07 18:36:25 547 1

原创 Linux了解Day1

学习方法:多记,多敲,多思考总结不要钻牛角尖课程安排:9天左右

2025-04-07 17:14:31 344

空空如也

空空如也

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

TA关注的人

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