- 博客(39)
- 收藏
- 关注
原创 Linux终端退出程序后,TCP地址仍被占用
下次我使用Ctrl+C退出程序,或者使用sudo lsof -i :PORT【PORT替换为使用的端口号】查看当前的占用端口的进程,获取进程的PID,然后使用命令sudo kill -9 PID【PID替换为查到的PID】销毁进程就可以了。首先是我使用Ctrl+Z退出程序实际上是不正确的方式,这会导致程序资源没有完全被回收,所以当我用这个不正确方法退出程序后,这个进程仍在进行http请求监听。如果是在终端中启动程序,在退出终端时确保使用正确的方法来终止程序。某些程序可能被设计为守护进程或作为系统服务运行。
2024-11-05 13:54:57 218
原创 redhat5与ubuntu上Makefile语法区别
这个库是Linux网络api的依赖库,在Linux的/lib、/usr/lib没有找到这个库,但是在/usr/lib/x86_64-linux-gnu/xtables找到了libxt_socket.so,结合网上说的Linux下不需要在Makefile里面使用-lsocket去链接这个库,所以就把Makefile里的语法改掉。这个在网上搜索才知道redhat5是可以将链接库放到-Wall后面的,但是在ubuntu上却不可以,将-lpthread放到最后问题就解决了,成功编译。
2024-11-05 10:04:40 29
原创 https握手过程详解
上一篇《HTTPS通讯全过程》中https握手过程实际上还有更多的细节,为什么会这样设计呢?是因为一开始将握手过程时,吧步骤说的太详细会导致更难理解惹。所以我就先在上一篇把部分细节忽略,把原来几步的过程先简化为一步,这样理解起来就会方便很多噜。
2024-08-16 17:54:55 916
原创 HTTPS通讯全过程
不得不说,https比http通讯更加复杂惹。在第一次接触https代码的时候,不知道为什么要用用证书,公钥是什么?私钥是什么?他们作用是什么?非对称加密和对称加密是啥?天,这些似懂非懂的概念,大大增加了我写代码的困难(本人就是不理解原理就浑身难受那种人惹,代码写着写着就想为什么要这样写,牛角尖一枚罢噜)。如果你也有这样的疑问,那么就让我们一起来看看这篇文章吧~~啾咪
2024-08-16 11:33:55 1318
原创 网络如何发送一个数据包
路由知道了下一个路由的IP地址后,同样的会广播一个ARP请求,与广播携带的IP数据一样的路由会响应这个广播,并携带上自己的MAC地址。当前局域网内的所有计算机以及路由器都会扫描到这个广播,并解析广播数据,当发现广播的IP地址信息和自己的相同时,就会将自己的MAC信息响应给计算机a。首先这个数据包会从计算机a发送到a的局域网的路由,此时通过ARP解析得到的是路由的MAC地址。每一级路由就像这样一级一级的发送,直到发送到目标的路由上,目标路由检测到目标就在和它连接的同一个局域网上时,就将数据包发送给目标b。
2024-08-13 17:01:19 1359
原创 深入理解计算机系统2--理解计算机系统的基本组成以及程序的运行
前面一章简单记录了程序在计算机系统是以什么形式被存储的以及编译器编译的过程,这篇文章则会记录程序是如何被运行的,它在磁盘中是如何被读取,计算机系统将会通过那些器件来解释、理解并执行程序。强烈建议大家看一看《深入理解计算机系统》这本书。本文参考资料《深入理解计算机系统》
2023-04-28 14:38:03 639
原创 深入理解计算机系统1--理解编译器编译的过程
大家在学习C语言的时候,相信对编译器这个词并不会感到陌生。我们也会知道编译器编译的过程是:预处理-》编译-》汇编-》链接。这篇文章主要介绍这四个过程中,编译器究竟做了那些工作,它是如何让一份高级程序转换成机器语言的,这个过程我觉得还是很有意思的。强烈建议大家看一看《深入理解计算机系统》这本书。本文参考资料《深入理解计算机系统》有错误的地方请及时指出,共同进步。
2023-04-27 16:43:47 668
原创 Linux学习 文件IO阶段A3——在LED上显示一个色块,位置、大小自己定义
Linux学习 文件IO阶段——在LED上显示一个色块,位置、大小自己定义我们要在LED上显示一个色块,还要规定色块的位置大小,如何做到?1)只要我们规定第一次光标的位置,就可以找到色块的初始位置;2)找到色块的起初是位置之后,如何规定色块的行?我们可以在光标的位置输入一行像素,像素的长短x我们可以规定,这就是色块的行宽x;3)有了行宽后,如何打印出宽?我们让输入行的代码执行y次就可以了。4)每次输入光标之后,再次执行输入像素代码的时候,不是接着输入的吗?这样怎么可能得到一个色块呢?我们把输入像素
2021-03-27 13:02:55 548
原创 Linux学习 文件IO阶段A2——用映射,实现LED界面刷像素
Linux学习 文件IO阶段A2——用映射,实现LED界面刷像素我们为什么要用映射空间呢?用write写入不是更好吗?用write写入数据,会出现输入卡顿,输入的数据有缺失的情况。因为映射空间是在数据存满空间时,吧数据一下写进LED屏幕的,所以这样输入方式就很快捷、不卡顿、输入信息完整。以下是参考代码:#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h&g
2021-03-27 12:39:38 144
原创 Linux学习-文件IOA1——用结构体和文件操作函数实现文件的拷贝
Linux学习-文件IOA1——用结构体和文件操作函数实现文件的拷贝其实我们不必选用结构体去实现模仿拷贝功能的,但是为了锻炼我们的思维以及对结构体、文件操作函数的使用,所以我们就这样来折腾自己。学习的过程就是将复杂的事情简单化,再将简单的事情复杂化,这样才会对只是理解更深刻透彻,运用的也会更加得心应手,我们在实际上遇到问题的时候也能从不同角度考虑问题了。以下是参考代码以及注释:#include<sys/types.h>//open头文件#include<sys/stat.h>
2021-03-27 12:14:34 218
原创 C语言—W10 用数组指针作为形参实参,对数组元素进行操作
C语言—W10 用数组指针作为形参实参,对数组元素进行操作我们以最简单的对数组元素的大小进行排列为例:#include <stdio.h>#include <stdlib.h>//函数srand、rand的头文件#include <time.h>//函数time的头文件//任务://1.调用函数给数组元素进行大小排列//2.函数的形参和实参类型是数组指针//---------函数的声明------------ int Data_Swap(int (
2021-03-16 11:55:23 673
原创 C语言学习—运算符—“~”取反符号的理解
C语言学习—运算符—“~”取反符号的理解5~ = -6;-5~ = 4;因为数据在计算机中是以二进制存放的。要知道原理,我们得先了解正负数在计算机中的存放形式:正数:原码=反码=补码负数:反码=原码取反;补码=反码+1;负数在计算机的存储方式是以补码对形式存在的。先看一下正数的取反符~的运算:以5为例:5是正数的原码=反码=补码(不用变换):原码:00000000 00000000 00000000 000001015“~”取反运算(逐位取反,包括符位):11111111 111111
2021-03-16 09:22:02 25256 2
原创 C语言学习—一级指针、二级指针的类型转换的进阶理解
C语言学习—一级指针、二级指针的类型转换的进阶理解类型转换都会在编程的时候运用到,很多人可能直观理解类型转换就是转换成另一个类型。其实这样理解也没有错,但是面对下面这种情况,就会出现段错误了:int Pointer_data(void **p,void **q){int data = **((int **)p);**((int **)p) = **((int **)q);**((int **)q) = data;return 0;}int main(void){int a=10,b=
2021-03-15 20:52:14 1151
原创 C语言学习—malloc、calloc、realloc的理解
C语言学习—malloc、calloc、realloc的理解malloc、calloc、realloc都是与内存分配有关的函数。要想了解三个函数的用法,得先了解内存的分配。静态存储区:静态存储区是全局变量、static类型的数据存放的区域。静态存储区的内存在整个程序运行结束前都不会被释放。栈区:栈区的数据是在语句执行后内存就会被释放。堆区:堆区的数据不会自动释放,需要用户用free、bzero等函数手动释放。们的malloc、calloc、realloc就是定义在栈区。头文件:#include&l
2021-03-15 20:34:57 670
原创 C语言学习—字符串函数总结string
C语言学习—字符串函数总结string和字符串有关的函数有很多,只需要学习常用的4种就够用,其他的在后面用到的时候自然而然就会。在学习这些函数之前我们需要知道,为什么字符串会有大小之分(清楚后会对这几个函数有更深得了解):因为计算机是不认识字符的,他只认识1和0这两个数值。ASCII的十进制数由32个二进制组成,所以计算机的CPU只要比较ASCII中字符对应的数值就可以求出那个字符串大,这也是为什么字符串有大小的原因。ASCII图下面有:这次总结的4个函数是:strlen、strcmp、strcpy、
2021-03-13 09:40:14 353
原创 C语言学习—指针的学习理解
C语言学习—指针的学习理解指针的学习往往很容易搞混。在我们了解学习指针之前,我们得先知道数据在计算机中的存放。数据在计算机中是以二进制文件存储的,我们的存储空间可以理解为以下形式:计算机是在这种小格子上存放数据的,CPU之所以会那么快找到数据,是因为每一个小格子都有它的名字,我们就叫它的名字为:地址!!!我们的指针,就是指向地址的小箭头,当我们需要找数据时,我们只要拿到存放着这个数据的地址,我们就能找到数据进行我们想要的操作。通俗一点的理解:就像我们不知道朋友住在酒店的那个房间,但是只要他告诉我
2021-03-12 19:21:49 684
原创 C语言 A3—统计数组元素出现的次数并且输出结果
C语言 A3—统计数组元素出现的次数并且输出结果参考代码:有两种办法方法一、#include<stdio.h>int main(void){int data[50],num,i;/*--------1.循环输入数据,并算出有效空间---------*/for(i=0;i<50;i++)//循环输入数值{ scanf("%d",&data[i]); if(data[i] == -1) { data[i] = 0;//当输入-1时,是无效值,所以清零
2021-03-10 19:14:18 4128
原创 C语言学习—程序在计算机中的存储运行理解
C语言学习—程序在计算机中的存储运行理解要知道程序在二进制中是怎么样存储运行的,我们就必须的把下面这句话牢牢记在心里:无论是程序还是文件,一切一切,都是以二进制存放在计算机中的!二进制文件就是由只有1和0组成的文件。原因:C语言、C++语言、Java…都是我们语法,计算机是不认识我们在键盘上敲进去的代码的。代码需要我们经过编译->汇编,形成二进制文件才会被计算机识别,因为计算机只能认识1和0.有了这个概念之后,我们就可以对文件(程序也是文件的一种)在计算机的运行存储进行进一步的了解了。首先,我们
2021-03-09 20:45:29 928 4
原创 C语言学习—字符数组的理解
C语言学习—字符数组的理解字符数组的概念顾名思义:字符数组就是由字符组合成的一个数组。我们的字符有:数字字符、英文字符、转义字符、特殊字符和中文字符。除了中文字符以外,其他字符都是一个字节,中文字符看下面分析。中文字符:在Linux系统中,中文字符的输出格式是UTF-8占3个字节;在Windows系统中,中文字符的输出格式是GBK或者GB2312,占2个字节。字符数组的定义字符数组和整形数组的定义类似。格式:类型名字 数组名字[数组空间];例如:char a[5];字符数组的赋值
2021-03-09 20:06:42 1561
原创 C语言学习—一维数组—进阶理解
C语言学习—一维数组—进阶理解地址:我们的编程是这样的一个过程:变量->代码->程序->内存我们编写的每一个变量都会在计算机内存上分配地址(内存是以1个字节为单位的),只有分配了地址计算机才能找到代码并运行。 以数组为例,我们给数组进行定义的时候,内存就帮助我们分配好了地址。上面说到我们内存是会给我们的变量随机分配地址的,当这次程序执行完成后,内存就会释放现在分配的地址,在这个程序再次被执行的时候,内存又会重新分配地址。数组地址的理解:数组的地址是连续存放的!数组的地址
2021-03-09 11:07:06 794
原创 C语言 A2—srand、rand和一维数组的搭配使用
C语言 A2—srand、rand和一维数组的搭配使用rand产生的数值虽然第一次产生的数值是随机的,但是之后就不会变了,所以我们要跟srand和time函数搭配使用。以下是参考代码,便于理解:#include<stdio.h>#include <stdlib.h>//函数srand、rand的头文件#include <time.h>//函数time的头文件#define M 6//增加代码的兼容性int main(void){srand(time(NU
2021-03-08 16:44:06 292
原创 C语言 A1—一维数组元素大小顺序排列
C语言 A1—一维数组元素大小顺序排列题目:将一维数组里面的数据从小到大按顺序排列:#include <stdio.h>#include <unistd.h>//sleep函数的头文件int main(void){int a[5];//定义数组for(int i=0;i<5;i++){ printf("数组里面的数据是:%d\n",a[i]);}for(int i=0;i<5;i++)//使数组从第一个元素开始比较,称为当前元素 //我们现在
2021-03-08 13:17:14 3680
原创 C语言学习—一维数组—初级理解
C语言学习—一维数组数组概念:数组是一个集合,可以存放多个数据。数组分类:数组也有分类,数组只能存放对应类型的数据,int型数组只能存放int类型的数据,以此类推。数组的分类和基本数据类型的分类一样。一维数组的格式:类型 数组名[常量或者常量表达式](eg:int a[3];)里面的3是可以改变的,我们写入3就代表这个数组的长度就是3,以此类推。缺点:数组虽然方便,但是有一个致命的缺点就是:数组需要先定义长度才可以使用,使用数组的长度是固定的。当我们对存入的数据大小不明确是,数组使用就会有一定的局
2021-03-08 10:56:22 274
原创 c语言 A21—求3*5矩阵每列最大值,输出矩阵和最大值
c语言 A21—求3*5矩阵每列最大值,输出矩阵和最大值题目:求一个3*5的矩阵各列元素的最大值,将原矩阵和求出的最大值全部输出。#include<stdio.h>int main(void){int sum[3][5],num[5];//定义两个数组,一个存放矩阵元素,一个存放最大值printf("please input 15 element:\n");for(int i=0;i<3;i++){ for(int j=0;j<5;j++) { scanf("
2021-03-06 11:28:17 4309
原创 C语言 A22—求3*5矩阵每行最大值,并输出矩阵和最大值
C语言 A22—求3*5矩阵每行最大值,并输出矩阵和最大值题目:求一个3*5的矩阵各列元素的最大值,将原矩阵和求出的最大值全部输出。#include<stdio.h>int main(void){int sum[3][5],num[3];//定义两个数组,一个存放矩阵元素,一个存放最大值printf("please input 15 element:\n");for(int i=0;i<3;i++){ for(int j=0;j<5;j++) { scanf(
2021-03-06 11:14:25 2833
原创 C语言 A20—求4*3矩阵每列的平均值,并输出原矩阵和平均值
C语言A20—求4*3矩阵每列的平均值,并输出原矩阵和平均值题目:求一个4*3的矩阵各行元素的平均值;将原矩阵和求出的平均值全部输出。参考代码:#include <stdio.h>int main(){int a[4][3],num[4] = {};//定义两个数组,一个存放矩阵,一个存放每列值的和printf("please input number:\n");for(int i=0;i<4;i++)//循环输入矩阵元素{ for(int j=0;j<3;j
2021-03-06 10:24:22 3781
原创 C语言学习—九个控制流语句总结
C语言学习—九个控制流语句总结1.if格式:1)if (条件语句){…}2)if(条件语句){…}else…3)if(条件语句){}else if(条件语句){}…else…依次判断条件语句是否符合条件,如果符合则执行对应的命令;如果不符合则判断下一个条件语句是否符合,以此类推。2.while格式:while(条件语句){…}当条件语句大于0时,会一直循环执行while下面的语句。3.for4.break5.switch…case6.do…w
2021-03-05 17:05:52 277
原创 C语言学习——运算符
C语言学习——运算符运算符的分类:赋值运算符:=、+=、-=、=、/=、%=(余等于)算数运算符:+、-、*、/、%(取余)、++、–int a = 10;printf("%d\n",++a)//11printf("%d\n",--a)//10printf("%d\n",a++)//10printf("%d\n",a--)//11printf("%d\n",a)//10比较运算符:大于:>小于:<等于:=不等于:!=大于等于:>=小于等于:<=逻
2021-03-05 16:56:35 407 1
原创 C语言 B3—打印一个数字矩形
B3—打印一个数字矩形题目:用任意一个数字,打印出一个矩形。参考代码:#include <stdio.h>#include<unistd.h>#define N 0 //定义N的值代表0,修改N后面的值可以打印出不同数字的矩形int main(void){for(int i = 4;i > 0;i--)//for循环设置打印的行数{ for(int j=4;j>0;j--)//for循环设置打印的列数 { printf("%d
2021-03-05 15:52:31 1295
原创 C语言 B2—依次打印多位数
B2—依次打印多位数题目:输入任意位数,从个位数开始依次打印。参考代码:#include <stdio.h>#include<unistd.h>int main(void){int num,data;printf("请输入一个数字:");scanf("%d",&data);do{ num = data%10; printf("%d ",num); sleep(5); data /= 10; }while(data != 0);printf("\
2021-03-05 15:09:02 240
原创 C语言 B1—闰年的判断
B1—闰年的判断题目:用代码判断某年份是不是闰年。闰年有两个判断条件:(1)闰年能被4整除但不能被100整除.(2)闰年能被四百整除。参考代码如下:#include <stdio.h>int main(void){int year;printf("请输入年份\n");scanf("%d",&year);if(year%4 == 0 && year%100 != 0) printf("%d是闰年\n",year);else if(year%400 ==
2021-03-05 14:33:45 116
原创 C语言 A8—打印金字塔图案
题目:打印以下图案:参考代码:#include <stdio.h>#define N 4//根据题目要求定义几行,增加int main(void){ for(int i=1;i<=N;i++)//循环行数 { for(int k=N-i;k>0;k--)//打印空格 { printf(" "); } for(int j=1;j<=(2*i-1);j++)//打印图案 { printf("*"); } printf("\n
2021-03-04 18:38:01 669 1
原创 C语言 A7计算1—20的阶乘的和
求1!+2!+3!+……+20!,将结果输出。#include <stdio.h>#define N 20//int main(void){ //printf("测试\n"); int sum,n; sum = 0; n = 1; for(int i=1; i<=N; i++)//先计算出每个阶乘的最大项 { for(int k=i; k>0;k--)//再算出每项阶乘的值 { n *= k; } sum += n;
2021-03-04 16:10:45 549 1
原创 c语言学习1——数据类型
c语言的学习1——数据类型代码运行的理解:在内存上我们编写程序,程序在磁盘上被编译,生成hello程序文件,经过cpu传回内存中,在内存中运行。数据在变量里面,变量在程序里面,动态的程序在内存里面。整形在内存中是以二进制的形式存在的,因为电路中只有高低电平。二进制的形式分为原码、补码、反码。整形数据的大小:int为例:占32位,在64位系统中:4个字节;在16系统中:2个字节。整形数据的分类:整形分为有符号数和无符号数:1.有符号数表示:int a; 前面讲到int类型
2021-03-04 12:27:54 181 1
原创 c语言学习A1——printf输出的符号表示
printf输出函数的符号表示以下是输出函数printf中符号输出%?可以输出的形式例如:int a = 20;printf("%d\n",a);%d表示输出十进制输出;printf("%o\n",a);%d表示输出八进制输出;printf("%x\n",a);%d表示输出十六进制输出;...
2021-03-04 12:27:25 1760 1
原创 C语言 A6计算n个学生的平均成绩
题目:从键盘上输入若干学生的一门课成绩,计算出平均分,当输入负数时结束输入。将结果输出。代码:#include <stdio.h>#define N 3int main(void){int m,n,sum;m=n=sum=0;//初始化变量printf("请输入学生成绩:\n");while(1)//while循环重复输入成绩{ scanf("%d",&m); if(m > 0)//一个if...else函数当输入成绩小于0时跳出循环 n++; els
2021-03-03 19:31:54 10217 2
原创 C语言 A5输入成绩,求出最高最低成绩的序列
题目:从键盘上输入若干学生的一门课成绩,统计并输出最高成绩和最低成绩及相应的序号,当输入负数时结束输入。代码:#include <stdio.h>#define N 100int main(void){int max,min,a[N],i,x,n;i= 0;x= 0;n= 0;int b;while(1)//输入成绩,并把它存进数组中,方便比较{ scanf("%d",&b); if(b<0) break; a[i] = b;
2021-03-03 19:12:18 1163 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人