自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux学习(17)-I/O复用(1)select、poll

第四步:如果有,处理文件描述符中的事件(如果此过程产生新的描述符,将新描述符送至第二步)FD_ZERO( fd _ set* fdset);(2)不用像select一样有fdset集合,只用维护好poll数组(结构体)即可。3)创建fd_set集合(将文件描述符加到fd_set集合中)

2024-08-31 17:01:42 924

原创 Linux学习(16)-http协议(应用层)与web服务器

发送一次请求报文,服务器回复一次就断开连接,下次交互再重新三次握手建立连接,称之为短链接。总结:短连接发一次,回复一次就断开;长连接发两次以上,回复两次以上,期间不用重新建立连接。1.HTTP协议为应用层协议其底层的传输层为TCP协议。两次以上的请求复用同一个TCP连接,则称之为长连接。2.代码实现通过http协议与web端建立连接。代码运行(注意HTTP,端口号固定为80,要在。二、代码实现http协议与web端建立连接。一、HTTP协议(超文本传输协议)1)HTTP的应答报头结构。

2024-08-30 00:20:07 484

原创 Linux学习(15)-网络编程:滑动窗口、拥塞控制、udp

只能等到B的应用进程将缓存中的数据清空,才能接受新的值。但这里有一个问题,当B的应用进程清空缓存后,并不会主动告知A(TCP当且仅当在它有数据需要确认和发送时才会发送报文段给主机A),这样主机A不可能知道主机B的接收缓存已经有新的空间了。解决:TCP规范中规定,当主机B的接受窗口为0时,主机A继续发送只有一个字节数据的报文段。这个报文段会被接收方确认。nagle算法的核心思想是允许网络中最多只能有一个小分组被发送,而待发送的其它小分组会被重新分组成一个”较大的”小分组,等收到上一个小分组的应答后再发送。

2024-08-29 18:18:53 1148

原创 C语言重难点总结(2)-指针操作与结构体、动态内存

1.分治策略: 是将规模比较大的问题可分割成规模较小的相同问题。问题不变, 规模变小。扩容情况2:如果后空间不足就会额外另外开一块大空间,将原始空间的数据拷贝到新空间当中并进行原空间的释放,返回新空间的地址。递归: 若一个函数直接地或间接地调用自己,则称这个函数是递归的函数。分解: 将问题划分成一些子问题, 子问题的形式与原问题一样, 只是规模更小。如果子问题的规模足够小, 则停止递归, 直接求解。3) 使用小规模的解,可以合并成, 该问题原规模的解。1) 该问题的规模缩小到一定的程度就可以容易地解决。

2024-08-27 23:06:02 1125

原创 C语言重难点总结(1)-指针、二维数组、结构体(联合体、枚举)

结构体没有嵌套结构体情况下,结构体内前几个元素的数据类型所占字节数之和是下一个元素类型的整数倍,如果不是给前一个类型补字节,补成下一个类型的整数倍,如上所示,访问第2行第5列时,超出了二维数组列范围的大小,超出部分会加入下一行的行中,所以,此处2行5列访问的为3行2列,元素为8。数组指针:数组指针可以简单理解为数组的指针,顾名思义就是指向一个数组的指针(常出现在二维数组),数组指针指向大小为n个元素的数组。行求法:int col=sizeof(arr[0])/sizeof(arr[0][0])

2024-08-26 23:56:34 1193

原创 Linux学习(14)-socket(套接字)网络编程-tcp协议(传输层)

/字符串表示的IPV4地址(点分十进制)转换为网络字节序列(无符号整型)(1)TCP/IP协议族中sockaddr_in用于IPV4地址格式,sockaddr_in6用于IPV6地址格式。//地址族:AF_INET(ipv4地址族)u_int32_t sin6_ scope _ id;// 地址族: AF_INET6。

2024-08-26 01:03:09 795

原创 Linux学习(13)计算机网络基础概论

广域网或者说互联网通常使用众多分级的路由器来连接分散的主机或者局域网,因此,通信的两台主机一般不是直接相连的,而是通过多个中间结点(路由器) 连接的。TCP/IP协议体系结构中, 数据链路层的功能描述为实现网卡接口的网络驱动程序, 以处理数据在物理媒介上的传输,不同的物理网络具有不同的电气特性,网络驱动程序隐藏了这些细节,为上层协议提供了一个统一的接口。因此,这一层的主要功能是在物理层提供的比特流的基础上,通过差错控制, 使有差错的物理线路变为无差错的数据链路, 即提供可靠的通过物理介质传输数据的方法。

2024-08-24 23:46:57 882

原创 Linux学习(12)-多线程

概念:线程同步指的是当一个线程在对某个临界资源进行操作时,其他线程都不可以对这个资源进行操作, 直到该线程完成操作, 其他线程才能操作, 也就是协同步调, 让线程按预定的先后次序进行运行。(2)在多线程中使用线程安全的函数(可重入函数),所谓线程安全的函数指的是: 如果一个函数能被多个线程同时调用且不发生竟态条件, 则我们程它是线程安全的。如上,当代码运行后,输入hello,触发任意一个线程的唤醒条件,输入end(代码中设置的)同时触发两个线程条件 的唤醒条件,结束程序。那么就说这些线程是安全的。

2024-08-24 00:01:41 730

原创 Linux学习(11)进程间通信(IPC)3-共享内存与消息队列

结果总结:如上我们能看到,通过信号量控制共享内存,一个进程向共享内存中写数据(该进程写入时,其余进程不能与共享内存建立连接),写入后,另一个进程在共享内存中读数据(读取时,第一个进程与共享内存先断开连接,该进程与共享内存建立连接,读取后,与共享内存断开连接,重复此过程)原理:共享内存是先在物理内存上申请一片空间,多个进程可以将其映射到自己的虚拟地址空间中,所有进程都可以访问共享内存(与共享内存建立连接(映射))(3)shmdt()断开当前进程指向的共享内存 (4)shmctl()控制共享内存。

2024-08-23 00:36:30 584

原创 Linux学习(10)-进程间通信(IPC)2-信号量

预期:我们同时运行a进程和b进程,初始化时信号量初始值为1,当a进程先运行时,先进行p(-1)操作,(因为a进程p操作将信号量值改为0,所以b进程此时不能运行,当前运行为a操作),通过a进程我们在屏幕输出A且成对出现,当进程将要结束时,进行v(+1)操作,信号量值改为1,此时a/b进程都可以操控打印机(信号量操控“打印机”ab进程不能同时使用)(1)概念:信号量是特殊的变量,值>=0 信号量值减1代表获取资源(p操作),+1代表释放啊资源(v操作)信号量(相当于程序的红绿灯对程序进行控制,同步进程)

2024-08-21 23:34:06 136

原创 linux学习(9)-进程间通信1(IPC)-管道

这里我们能看到我们通过向a中向管道写数据,b中出现相同的数据,所以可以说b成功从管道中读取,证明该管道通信方式成功。这里我们可以看到,通过运行代码后,我们向父进程中发送数据,通过管道,子进程会读取相同的数据,所以管道建立成功。创建完毕后,创建两个进程(一个进程进行发数据,另一个进程通过管道接收数据)接下来我们要进行通过a向管道中输入数据,然后b通过管道读取数据。(一个文件向管道输入数据,另一个文件在管道中读取数据)如上代码为向管道中写入数据的进程(记作a.c)2.管道(有名管道、无名管道)

2024-08-20 23:11:16 457

原创 Linux学习(8)-信号(shell) 常见信号、发送信号(kill)及信号相应方式(signal)

运行signal.c后程序会一直输出“Hello”,我们通过重新打开一个页面,通过管道获取signal程序的pid号,然后结合我们自己定义的信号mykill(参数为:1.要发送信号进程的pid号2.该程序要执行的响应方式)来终止signal.c程序的死循环(相当于通过mykill.c向signal.c发送信号)结论:通过运行结果我们可以看出,在输入ctrl c后程序不会被终止(这里我们最后是通过ctrl \终止的程序),证明系统忽略了SIGNIT(ctrl c)可以终断程序这个响应。

2024-08-18 23:42:23 783

原创 Linux学习(7)—fork与系统文件调用结合、进程替换exec、malloc申请空间-物理内存与虚拟内存结合

这里我们能看到,a.txt中存储的内容为abcde,我们通过main函数先打开文件后复制进程各输出两次父子进程内容,发现父进程先输出首元素,子进程紧接着输出下一个元素,父子进程交替输出,偏移量被父子进程共享,向下一个偏移,所以导致父子进程交替顺序输出文件元素。从运行结果我们可以看出, a.txt中存储的内容为abcde,我们通过main函数先复制进程后打开文件各输出两次父子进程内容,发现父子进程替输出的内容相同,偏移量没有被父子进程共享,所以父子进程都输出文件的前两个元素。

2024-08-18 00:39:51 714

原创 Linux学习(6)文件描述符(操作文件调用系统)

文件操作方式(flags)有:O_WRONLY只打开、O_RDONLY只读、O_RDWR读写方式打开、O_CREAT文件不存在创建、O_APPEND文件末尾追加、O_TRUNC清空文件,重新写入等。1.c语言中fopen、fwrite、fread、fclose等文件操作库函数与linux系统的open、write、read、close等文件操作符的关系。open返回值为int类型,第一个参数:文件名字,第二个参数:文件操作方式(读、写等),第三个参数:文件权限。三、 实现一个自己的cp操作指令(mycp)

2024-08-17 00:27:58 576

原创 Linxu学习(5)输出缓冲区问题、主函数参数与进程的复制

执行完上述函数结果如下, 在程序运行后 ,屏幕上直接显示出“Hello,World”我们需要的结果,但后边的条框还在闪,等待三秒控制面板下一行才自动弹出,证明此时程序才执行完毕,说明该程序是通过强制刷新缓冲区(“\n”或“fflush”)先将数据传送到屏幕上,再继续执行。执行完上述函数结果如下,由于是图片缘故,不能显示输出过程,所以这儿我口述,输出过程:在程序运行后 ,我们等待了三秒,屏幕上才显示出“Hello,World”我们需要的结果,所以说明该程序是运行完毕后将结果打印到屏幕上。

2024-08-16 13:02:53 435

原创 Linux学习(4)计算机基础概论

(2) 控制器: 它是整个计算机系统的控制中心,它指挥计算机各部分协调地工作,保证计算机按照预先规定的目标和步骤有条不紊地进行操作及处理。(3) 控制总线: 由于各个连接在数据总线和地址总线的部件都是共享这两类总线的,那么在某一时刻由谁来使用, 就是控制总线负责完成的。(1) 运算器: 也叫算数逻辑单元,完成对数据的各种常规运算, 如加减乘除, 也包括逻辑运算, 移位, 比较等。(4) 输入设备: 把人所熟悉的信息如,图片, 声音,文字, 转换为计算机能够识别的信息存储起来。I/O设备就是输入设。

2024-08-16 10:23:13 304

原创 Linux学习(3)-linux系统上库文件的生成与使用

通过操作面板在文件所在路径下输入 gcc -c add.c 与gcc -c max.c(此处add可以改成你自己定义的任意库名称),.c文件转化为.o文件。通过操作面板在文件所在路径下输入 gcc -c add.c 与gcc -c max.c(此处add可以改成你自己定义的任意库名称),.c文件转化为.o文件。使用:通过gcc -o main main.c -L. -lfoo(-L指定库的存储路径 -l指定库的名称)第一步:过程 与制作静态库相同,将需要生成库文件的所有“.c”文件编译成“.o”文件。

2024-08-15 23:32:02 555

原创 Linux学习(2)系统上C编程与代码调试

在Linux系统中我们可以通过gcc一步一步将源文件(.c)文件编译到.exe文件 如下。在该路径下输入:gcc -o 文件名称 文件名称.c gcc会自动编译代码。(2)编译: gcc -S main.c -o main.s 生成.s文件。(3)汇编: gcc -c main.s -o main.o 生成.o文件。输入:vim 文件名称.c 系统会自动创建并该文及名称的.c文件,并进入vim中。(1)预编译:gcc -E main.c -o main.i 生成.i文件。

2024-08-15 15:07:57 465

原创 Linux学习(1)系统常见的目录、文件类型及权限、操作指令

12)设备文件 dev。7)管理员用户的家目录 root。11)临时挂载点(u盘) mnt。设备文件 c或b (b为块设备 、c为字符设备)

2024-08-15 13:34:51 1089 1

空空如也

空空如也

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

TA关注的人

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