
黑马linux系统编程和网络编程
文章平均质量分 87
黑马linux系统编程和网络编程
为了前进而后退,为了走直路而走弯路
https://darling-123456.github.io/个人博客网站,欢迎访问
展开
-
linux高性能服务器编程读书笔记目录&&建议
前台进程是什么-优快云博客阻塞和非阻塞小总结-优快云博客Linux高性能服务器编程中的TCP带外数据梳理总结-优快云博客epoll反应堆模型-优快云博客UDP通信-优快云博客Ubuntu安装libevent库-优快云博客高并发服务器实现总结目录-优快云博客信号,信号量,条件变量三者辨析-优快云博客进程间通信方式—管道(使用最简单)-优快云博客进程间通信方式—文件(已经过时的东西看一遍有个印象)-优快云博客进程通信方式—共享映射区(无血缘关系用的)-优快云博客。原创 2024-12-20 22:28:54 · 1016 阅读 · 0 评论 -
各种进程间通信方式详解,多的不说了大家自己看吧
各种进程间通信方式详解文章目录各种进程间通信方式详解1.基本原理2.基本概念1.进程间通信的重要性2.IPC 方式分类汇总1.基于内核的通信共享内存和共享映射区的区别2.基于文件系统的通信原理3.基于网络的通信原理(适用于不同主机上的进程通信)3.管道(使用最简单)1.概述2.使用3.管道的读写行为1.读管道2.写管道3.练习1.管道实现 ls|wc-l2.管道实现兄弟进程通信3.测试管道是否允许一个pipe有一个写端多个读端?有一个读端多个写端?4.管道大小5.管道优劣6.有名管道FIFO实现没有血缘关原创 2024-12-20 22:20:07 · 860 阅读 · 0 评论 -
Linux高性能服务器编程 | 读书笔记 | 11. 多进程编程
11. 多进程编程复制进程映像的fork系统调用和替换进程映像的exec系列系统调用。僵尸进程以及如何避免僵尸进程。进程间通信(Inter Process Communication,IPC)最简单的方式:管道。三种System V进程间通信方式:信号量、消息队列、共享内存。它们是由AT&T System V2版本的UNIX引入的,所以统称为System V IPC。在进程间传递文件描述符的通用方法:通过UNIX本地域socket传递特殊的辅助数据。(关于辅助数据,参考《Linux 高性原创 2024-12-20 22:13:14 · 1099 阅读 · 0 评论 -
会话&&守护进程
Daemon(精灵)进程,是 Linux 中的后台服务进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。当父进程,创建子进程的时候,默认子进程与父进程属于同一进程组。参数 a 表示不仅列当前用户的进程,也列出所有其他用户的进程,参数 x 表示。组长进程可以创建一个进程组,创建该进程组中的进程,然后终止。不仅列有控制终端的进程,也列出所有无控制终端的进程,参数 j 表示列出与作业控制相关的信息。创建一个会话,并以自己的 ID 设置进程组 ID,同时也是新会话的 ID。原创 2024-12-20 22:10:01 · 804 阅读 · 0 评论 -
进程间通信博客总结目录
【代码】进程间通信博客总结目录。原创 2024-12-20 21:07:25 · 474 阅读 · 0 评论 -
进程间通信方式---消息队列(System V IPC)
例如,在生产者 - 消费者模型中,生产者进程将生产的数据作为消息发送到消息队列,消费者进程从消息队列中接收消息并进行消费,通过消息类型等机制可以确保消息的正确发送和接收,从而实现生产者和消费者之间的协调工作。消息队列是在两个进程间传递二进制数据块的方式,每个数据块都有一个特定类型,接收方可以根据类型来有选择地接收数据,而不一定像管道和命名管道那样必须以先进先出的方式接收数据。系统调用,用于对消息队列进行控制操作(控制消息队列某些属性),如获取消息队列的状态信息、设置消息队列的属性、删除消息队列等。原创 2024-12-20 21:04:20 · 809 阅读 · 0 评论 -
进程间通信方式---共享内存(System V IPC 和POSIX)
如果 shm_addr 非空,并且设置了 SHM_RND 标志,则被关联的地址是 [shm_addr-(shm_addr % SHMLBA)]。SHM_RND 的含义是圆整 (round),即将共享内存被关联的地址向下圆整到离 shm_addr 最近的 SHMLBA 的整数倍地址处。如果 shmget 用于创建共享内存,则这段共享内存的所有字节都被初始化为 0,与之关联的内核数据结构 shmid_ds 将被创建并初始化。成功时,返回指向连接后的共享内存段在进程地址空间中的起始地址的指针。原创 2024-12-20 16:25:34 · 743 阅读 · 0 评论 -
进程间通信方式---System V IPC信号量
定义了ListNode结构体来表示链表的节点,包含一个int类型的数据成员用于存放生产者生产的数据,以及一个指向下一个节点的指针成员。原创 2024-12-20 15:26:39 · 867 阅读 · 0 评论 -
System V IPC信号量和POSIX信号量详解
定义了ListNode结构体来表示链表的节点,包含一个int类型的数据成员用于存放生产者生产的数据,以及一个指向下一个节点的指针成员。在Linux上,信号量API有两组,一组是System V IPC信号量(信号量),另一组是我们要讨论的POSIX信号量。这两组接口很相似,且语义完全相同,但不保证能互换。进化版的互斥锁(1 --> N)由于互斥锁的粒度比较大,如果我们希望在多个线程间对某一对象的部分数据进行共享,使用互斥锁是没有办法实现的,只能将整个数据对象锁住。原创 2024-12-20 12:05:10 · 701 阅读 · 0 评论 -
实现线程同步的方法
资源共享(独享资源则不会)调度随机(意味着数据访问会出现竞争)线程间缺乏必要的同步机制。以上 3 点中,前两点不能改变,欲提高效率,传递数据,资源必须共享。只要共享资源,就一定会出现竞争。只要存在竞争关系,数据就很容易出现混乱。所以只能从第三点着手解决。使多个线程在访问共享资源的时候,出现互斥。互斥锁(也称互斥量)用于保护关键代码段,以确保其独占式的访问,这有些像二进制信号量(信号量),当进入关键代码段时,我们需要获得互斥锁并将其加锁,这等价于二进制信号量的P操作;原创 2024-12-19 22:37:35 · 1028 阅读 · 0 评论 -
Linux高性能服务器编程 | 读书笔记 | 12. 多线程编程
light weight process 轻量级的进程,本质仍是进程(在Linux环境下)进程:独立地址空间,拥有PCB线程:有独立的PCB,但没有独立的地址空间(与进程共享)区别:在于是否共享地址空间。独居(地址空间就是进程一个);合租(地址空间有多个线程)线程:最小的执行(调度)单位进程:最小分配资源单位,可看成是只有一个线程的进程执行该命令可以得到线程号LWP(LWP是cpu执行的最小单位,但和后面讲到的线程id不是一回事)ps aux ps -Lf 进程id //得到该进程里面的线程。原创 2024-12-19 22:28:43 · 1611 阅读 · 0 评论 -
System V IPC信号量和POSIX信号量的区别与联系
在Linux上,信号量API有两组,一组是System V IPC信号量,另一组是POSIX信号量。原创 2024-12-19 16:58:58 · 870 阅读 · 0 评论 -
进程间通信方式---本地套接字(最稳定)
bind()函数调用成功,会创建一个 socket。因此为保证bind成功,通常我们在 bind之前, 可以使用 unlink(“srv.socket”);进程间通信(IPC): pipe、fifo、mmap、信号、本地套接字(domain)— CS模型。实现server和client这两个进程间的通信,其实就是各自建立一个socket进行通信。客户端不能依赖 “隐式绑定”。2.服务器端的socket地址结构(用于connect,连接客户端和这个服务器)1.客户端自己的socket的地址结构。原创 2024-12-19 11:59:21 · 609 阅读 · 0 评论 -
进程通信方式---共享映射区(无血缘关系用的)
原理:共享映射区是将文件内容映射到进程的地址空间中,使得多个进程可以通过访问这个共享的内存区域来实现通信。进程对映射区域的操作就如同对文件进行操作一样,这些操作会直接反映在文件和其他共享该映射区域的进程中。示例场景:多个进程需要共同操作一个配置文件,通过将该配置文件映射到共享映射区,进程可以直接在内存中读取和修改配置信息,而不需要频繁地进行文件 I/O 操作。优点:结合了内存操作的高效性和文件存储的持久性;可以方便地在不相关的进程之间实现通信,只要它们能访问到同一个文件。缺点。原创 2024-12-18 22:47:57 · 1121 阅读 · 0 评论 -
进程间通信方式---文件(已经过时的东西看一遍有个印象)
这个理所当然可以通信,因为父子进程文件描述符表都是一样的。已经过时的东西,过一遍有个印象即可。原创 2024-12-18 21:29:51 · 224 阅读 · 0 评论 -
进程间通信方式---管道(使用最简单)
管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,完成数据传递。调用pipe系统函数即可创建一个管道。其本质是一个伪文件(实为内核缓冲区)由两个文件描述符引用,一个表示读端,一个表示写端规定数据从管道的写端流入管道,从读端流出管道实为内核使用环形队列机制,借助内核缓冲区(4k)实现1 数据不能进程自己写,自己读2.管道中数据不可反复读取。一旦读走,管道中不再存在3 采用双向半双工通信方式,数据只能在单方向上流动4 只能在有公共祖先的进程间使用管道。原创 2024-12-18 20:19:46 · 746 阅读 · 0 评论 -
信号,信号量,条件变量三者辨析
函数初始化信号量的值为 1。生产者进程和消费者进程在访问共享资源(模拟的缓冲区)之前,都需要执行。操作获取信号量,如果信号量的值为 0(表示资源被占用),则会被阻塞。用于保护任务队列的并发访问,保证在检查任务队列是否为空和添加 / 取出任务时的原子性。函数等待任务队列中有任务。主线程在向任务队列添加任务后,通过。操作释放信号量,使得其他进程可以获取信号量来访问资源。函数唤醒一个等待的工作线程来执行任务。函数,而不是默认的终止进程。函数创建了一个信号量,通过。在这个例子中,工作线程通过。原创 2024-12-18 14:46:20 · 422 阅读 · 0 评论 -
高并发服务器实现总结目录
linux网络编程 | c | 多进程并发服务器实现-优快云博客linux网络编程 | c | 多线程并发服务器实现-优快云博客linux网络编程 | c | select实现IO多路转接服务器-优快云博客linux网络编程 | c | select实现IO多路转接服务器-优快云博客linux网络编程 | c | epoll实现IO多路转接服务器-优快云博客Libevent实现TCP客户端服务器-优快云博客UDP通信-优快云博客原创 2024-12-17 23:24:28 · 527 阅读 · 0 评论 -
Linux高性能服务器编程 | 读书笔记 | 10. 高性能I/O框架库Libevent
I/O框架库以库函数的形式,封装了较为底层的系统调用,给应用程序提供了一组更便于使用的接口。各种I/O框架库的实现基本原理相似,要么以Reactor模式实现,要么以Proactor模式实现,要么同时以这两种模式实现。例如,基于Reactor模式的I/O框架库包含以下组件:句柄(Handle)、事件多路分发器(EventDemultiplexer)、事件处理器(EventHandler)、具体的事件处理器(ConcreteEventHandler)、Reactor。原创 2024-12-17 23:18:36 · 1245 阅读 · 0 评论 -
Libevent实现TCP客户端服务器
5.使用 bufferevnet_socket_new()创建一个新bufferevnet事件,将fd 封装到这个事件对象中。2.使用 bufferevnet_socket_new()创建一个用跟服务器通信的 bufferevnet 事件对象+8.接受、发送数据 bufferevent_read()/bufferevent_write()6.接受、发送数据 bufferevent_read()/bufferevent_write()会得到一个新fd,用于跟客户端通信(读、写)原创 2024-12-17 23:15:05 · 1080 阅读 · 0 评论 -
Ubuntu安装libevent库
是一个高事件通知库,它在中非常有用。它可以用于开发各种网络应用程序,包括服务器和客户端。在本篇博客中,我们将介绍如何在Linux系统上安装libevent库,以便你可以开始编写高性能的网络应用程序。原创 2024-12-16 11:53:23 · 799 阅读 · 0 评论 -
UDP通信
src_addr:(struct sockaddr *)&addr 传出。src_addr:(struct sockaddr *)&addr 传入。相对TCP来说, 服务端的accept()和客户端connect()不需要了。成功接收数据字节数。失败:-1 errn。recv()和send()只能用于TCP。addrlen:传入传出,结构体的长度。addrlen:地址结构长度。涵盖accept传出地址结构。buf:存储数据的缓冲区。sockfd: 套接字。sockfd: 套接字。成功写出数据字节数。原创 2024-12-15 22:36:51 · 498 阅读 · 0 评论 -
epoll反应堆模型
核心:epoll ET模式 + 非阻塞socket + 轮询 + void *ptr(回调函数)就是原来咱们监听到事件比如说读事件的话,就得自己去写read或者recv去读数据, 现在有了ptr,就不用管了,有了读事件程序自己就帮我调了回调函数,我不用自己写了2.epoll_create 创建监听 红黑树3.返回 epfd – epo11_ct1()向树上添加一个监听fd4.while(1) 循环着做下面的事情 5-105.epoll_wait 监听6.对应监听fd有事件产生。原创 2024-12-15 22:17:38 · 1172 阅读 · 0 评论 -
小重点:read系统调用&&传入参数,传出参数和传入传出参数
在处理这些错误时,应根据具体的错误类型和情况采取相应的措施。例如,对于可恢复的错误(如EINTR),可以重新尝试读取操作;对于硬件错误或严重的系统错误(如EIO),可能需要进行更复杂的错误处理或系统恢复操作。当read系统调用返回-1时,表示读取数据时发生了错误。此时,全局变量errno会被设置为一个特定的错误码,以指示错误的类型。需要注意的是,errno的值是在发生错误时由系统设置的,因此在调用read函数后应立即检查其返回值,并在返回值为-1时检查errno的值以确定错误的类型。原创 2024-12-14 11:05:35 · 690 阅读 · 0 评论 -
网络字节序本地字节序点分十进制转换函数总结&&两种初始化socket并bind的步骤
看完这些转换可以去看初始化socket的步骤,会印象更加深刻一些。原创 2024-12-13 16:23:19 · 1127 阅读 · 0 评论 -
linux网络编程 | c | epoll实现IO多路转接服务器
可通过以下视频学习通过响应式–多路IO转接实现。原创 2024-12-13 10:56:49 · 689 阅读 · 0 评论 -
linux网络编程 | c | select实现多路IO转接服务器
基于该视频完成通过响应式–多路IO转接实现要求:能看懂看,看不懂也没啥大事,现在基本都用epoll代替了大家看视频思路吧,代码就是从讲义里面copy了一份,因为不是很重要的东西。原创 2024-12-12 22:35:20 · 483 阅读 · 0 评论 -
linux网络编程 | c | select实现多路IO转接服务器
基于该视频完成通过响应式–多路IO转接实现。原创 2024-12-12 21:37:04 · 762 阅读 · 0 评论 -
linux网络编程 | c | 多线程并发服务器实现
基于该视频完成通过的是的方式实现的和阻塞等待的区别就是,阻塞是真的阻塞了,而这个方式是一直在问有没有请求有没有请求可以先看看这篇博客,思路和功能都一样。原创 2024-12-12 19:07:19 · 1206 阅读 · 0 评论 -
linux网络编程 | c | 多进程并发服务器实现
基于该视频完成通过的是的方式实现的和阻塞等待的区别就是,阻塞是真的阻塞了,而这个方式是一直在问有没有请求有没有请求。原创 2024-12-12 18:43:49 · 919 阅读 · 0 评论 -
黑马程序员 | Linux网络编程 | 学习笔记
Linux网络编程本质就是实现服务端和客户端的通信传输,而Linux系统编程也有讲过本地进程间的通信,所以总结一下各种通信的方式,以免混淆;本地通信pipe(管道):实现了有血缘关系进程间的通信fifo:可用于非血缘关系进程间的通信mmap内存映射:上面两个的功能它都可以实现信号:信号量本地套接字:socket(),参数 domain:AF_UNIX/AF_LOCAL网络通信多进程:也就是为每个客户端分配一个进程来处理请求(记得回收子进程)原创 2024-10-12 10:45:08 · 1454 阅读 · 0 评论 -
黑马程序员 | linux系统编程 | 学习笔记
根目录/bin:可执行的二进制文件/boot:放置linux系统启动时用到的一些文件/dev:存放linux系统下的设备文件/etc:系统配置文件存放的目录/home:系统默认的家目录/lib:系统使用的函数库目录/media和/mnt:光盘默认挂载点/opt:安装第三方软件所需的默认目录/proc:此目录的数据都在内存中(不占用磁盘空间),如系统核心、外部设备等/root:系统管理员的家目录/sbin:放置给系统管理员root使用的命令/srv。原创 2024-10-12 10:42:54 · 1663 阅读 · 3 评论