webserver
文章平均质量分 71
Luck66Max
“放弃很容易,但坚持一定很酷!”
展开
-
【网络编程】
因为如果不创建子进程的话,就只有一个进程在一个死循环里不断通信,那么就无法accept下一个客户端通信。网络字节序都是大端的,主机字节序是自己的字节序,规定通信的时候都统一使用网络字节序。比如两台机器通讯,如果字节序不一致的话,解析出来的内容就会不一样。:数据的低位在内存的低位,数据的高位在内存的高位;这里的文件描述符对于内存中的一块缓冲区,对应读缓冲和写缓冲。发送数据之前,要将主机字节序转换成网络字节序。-p 显示正在使用socket的程序的名称。发送数据是由底层的TCP模块帮我们完成的。原创 2023-04-26 17:30:24 · 594 阅读 · 1 评论 -
【线程同步】
与进程(process)类似,线程(thread)是允许应用程序并发执行多个任务的一种机制。一个进程可以包含多个线程。同一个程序中的所有线程均会独立执行相同程序,且共享同一份全局内存区域,其中包括初始化数据段、未初始化数据段,以及堆内存段。(传统意义上的 UNIX 进程只是多线程程序的一个特例,该进程只包含一个线程)进程是 CPU 分配资源的最小单位,线程是操作系统调度执行的最小单位。线程是轻量级的进程(LWP:Light Weight Process),在 Linux 环境下线程的本。原创 2023-04-25 12:09:03 · 479 阅读 · 0 评论 -
2.19 信号概述
◼ 许多信号相关的系统调用都需要能表示一组不同的信号,多个信号可使用一个称之为信号集的数据结构来表示,其系统数据类型为 sigset_t。3.这个未决状态的信号,需要被处理,处理之前需要和另一个信号集(阻塞信号集),进行比较。◼ 信号的 “未决” 是一种状态,指的是从信号的产生到信号被处理前的这一段时间。◼ 信号的 “阻塞” 是一个开关动作,指的是阻止信号被处理,但不是阻止信号产生。所以一般情况下信号的阻塞只是暂时的,只是为了防止信号打断敏感的操作。◼ 前 31 个信号为常规信号,其余为实时信号。原创 2023-04-23 21:28:13 · 594 阅读 · 0 评论 -
2.10-2.18 进程间通信/IPC【含案例ps aux | grep xxx实现】
进程之间是独立的:他们不能通过栈空间的变量来共享信息,因为都是不同的资源进程不是孤立的:比如一个下载视频的进程和播放视频的进程,二者需要进行信息的交互资源的同步和异步:同步:去医院看病,一个病人看完才能进行下一个,不会产生安全问题异步:所有病人一块看病,产生隐私安全问题。原创 2023-04-01 23:42:11 · 337 阅读 · 0 评论 -
2.7 进程退出、孤儿进程、僵尸进程+2.8 wait函数+2.9 waitpid函数
5.调用exit(0);但是还可以调用_exit(0),不刷新缓冲区。\n和fflush(stdout)在这里起的作用是刷新缓冲区。4.手动刷新缓冲区fflush(stdout)。子进程退出时:父进程帮助子进程回收内核区的资源。子进程die,父进程没有去回收子进程的资源。子进程的父进程id变成init = 1。杀死父进程,让子进程被init进程托管。因为他不知道还有个孤儿进程没执行完毕。子进程的状态已经变成zombie。原创 2023-04-01 16:22:51 · 553 阅读 · 0 评论 -
2.6 exec函数族
函数族:一系列功能相似的函数,类似C++的函数重载,C语言中没有函数重载exec:并不是生成一个新的进程一般是先fork一个子进程,然后把子进程的实体替换掉。原创 2023-04-01 15:28:32 · 68 阅读 · 0 评论 -
2.3-2.5 进程创建+虚拟地址空间+GDB多进程调试
fork产生的子进程与父进程相同的文件文件描述符指向相同的文件表,引用计数增加,共享文件偏移指针。也就是说,资源的复制是在需要写入的时候才会进行,在此之前,只有以只读方式共享。只有在需要写入的时候才会复制地址空间,从而使各个进程拥有各自的地址空间。内核此时并不复制整个进程的地址空间,而是让父子进程共享同一个地址空间。一次是在父进程中,一次是在子进程中。比如父进程的栈空间的pid>0,而子进程的栈空间的pid=0。父进程和子进程的代码都是一样的,只是根据。在父进程中返回创建的子进程的ID,原创 2023-03-30 12:29:17 · 172 阅读 · 0 评论 -
2.2 进程状态转换
阻塞态:比如等待一个用户的输入,不能直接变成运行态;因为阻塞的时候已经让出了CPU资源。就绪态:简单理解,进程已经有了CPU的资源,但是没有CPU的执行权,处于等待的状态。ps aux是一个快照,不能动态显示。当前运行的程序的父进程就是当前的终端。就绪态、阻塞态也可以到达终止态。PPID 父进程的ID。PGID进程组的ID。-9 信号,强制杀死。原创 2023-03-23 20:33:37 · 190 阅读 · 0 评论 -
2.1 进程概述
不占用CPU的资源和内存;但是程序是文件,占用磁盘的大小。时间片不能太短,进程切换浪费时间;也不能太长,宏观上不能同时执行。进程是操作系统为程序分配的内存资源(内存、CPU)、一个进程启动起来,会为他分配一个虚拟地址空间。占用内存和CPU资源。原创 2023-03-23 20:05:38 · 55 阅读 · 0 评论 -
1.17-1.30 文件IO
一言以蔽之,标准C库IO函数 和 Linux系统IO函数 就是 调用 与 被调用 的关系。标准C库IO函数更加高级,效率更高;Linux系统IO函数更偏向底层。原创 2023-03-14 22:27:31 · 166 阅读 · 0 评论 -
1.13-1.16 GDB调试
源码int a , b;a = 10;b = 30;++ i) {// 函数调用 int res = test(i);!!\n");return 0;i < a;生成带调试信息的编译指令运行gdbgdb test设置参数退出gdbq。原创 2023-03-14 21:52:26 · 59 阅读 · 0 评论 -
1.10-1.12 Makefile
举个栗子,如下为redis-5.0.10的项目目录,有很多的文件有了Makefile文件,可以简单的make一下就可以对项目文件进行编译,最终生成可执行程序。原创 2023-03-14 18:48:38 · 239 阅读 · 0 评论 -
1.9 静态库和动态库的对比
125、C++从代码到可执行程序经历了什么?原创 2023-03-14 17:40:42 · 223 阅读 · 0 评论 -
1.6 动态库的制作和使用
lib,/usr/lib包含了系统自带的动态库文件,如果重名了的话会被替换,系统程序可能出问题。当我们的程序使用动态库的一个API的时候,就会查找动态库的绝对路径,然后加载到内存当中。这个就是打开/etc/ld.so.conf之后的效果,将so的绝对路径添加进去。检查一下是否成功添加,也可以成功运行。运行时需要把动态库加载到内存中。添加动态库的绝对路径到环境变量。把so文件拷贝到lib目录下。编译时不会报错,运行时报错。-l(小L)动态库的名称。生成与位置无关的代码。添加动态库的绝对路径。原创 2023-03-14 17:18:48 · 221 阅读 · 0 评论 -
1.4 静态库的制作
保密性:比如你开发的一个压缩算法拿去卖钱,使用库可以避免被人看出逻辑,即使反编译也没用add.c。原创 2023-03-06 21:53:00 · 59 阅读 · 0 评论 -
1.2+1.3 GCC
【纠错】输入的参数 -s 是错误的(没有 -s 参数,只有 -S 参数,手误),应该是 -c 参数。-c 生成目标代码 test.o,test.o 不是一个可执行程序。如果下一步需要继续链接成可执行程序,需要输入指令 gcc test.o -o test.out(这里直接将 .o 目标文件链接成可执行程序 test.out,可以有多个 .o 文件,这里只有一个)gcc编译C程序,g++编译C++程序(也可以编译C程序。意义:方便调试,发布的时候不需要输出宏的地方。引入头文件代码,删掉注释,宏替换。原创 2023-03-06 17:28:19 · 209 阅读 · 0 评论 -
1.1 Linux开发环境搭建
跟着这个博主解决,没找到添加项在哪,自己在下面的配置文件中手动添加的,然后就不报错了。这样之后用vscode连接Ubuntu虚拟机就不需要每次输入密码啦~每次连接都需要输入Ubuntu服务器的密码,很麻烦。查看Ubuntu服务器的IP地址时,如果。添加mingw的include路径。失败,需要先安装一下net工具。原创 2023-03-01 21:30:54 · 216 阅读 · 1 评论