linux
blog_wanghao
与其临渊羡鱼,不如退而求网
展开
-
socket---TCP通信
TCP通信流程的编写: 通信流程: Server: 1.创建套接字 2.为套接字绑定地址信息 3.开始监听 告诉系统可以开始处理客户端的连接请求。 系统会为每一个新客户创建一个新的套接字 4.获取新建连接 5. 收发数据(使用的是新建的套接字) 6. 关闭套接字 Client: 1.创建套接字 2. 为套接字绑定地址信息(不推荐主动绑定) 3.向服务端发起连接请求(开始监听之后) 4.收发数据 5.关闭套接字 接口认识: 1.创建套接字:int socket(int domain, int type, in原创 2021-12-29 15:31:45 · 1182 阅读 · 0 评论 -
socket---UDP通信
通信流程: Server: 1.创建套接字 — 在内核中创建一个socket结构体 2.为套接字绑定地址信息 在创建套接字创建的socket结构体中加入IP+PORT信息 1.告诉操作系统主机收到的哪些数据应该交给当前的这个socket 2.确定发送数据的源端地址信息 3.接收数据 当前进程从指定的socket接收缓冲区中取出数据 4.发送数据 将要发送的数据放到socket发送缓存区中,内核选择合适时候封装发送 5.关闭套接字 Client: 1.创建套接字 2.为套接字绑定地址信息 (大多数情况下会原创 2021-12-09 19:21:31 · 2108 阅读 · 0 评论 -
进程信号---阻塞信号
阻塞: 信号依然可以注册,只是暂时阻止信号被处理。 在pcb中还有一个信号集合—阻塞集合;哪个信号在这个集合中被标记,则表示这个信号要阻塞,收到了这个信号则暂时不去处理。 int sigprocmask(int how, const sigset_t *set, sigset_t *oldset); //how:操作类型---要对阻塞集合进行的操作 //SIG_BLOCK:将set集合中的信号添加到阻塞结合;block|=set //SIG_UNBLOCK:从阻塞结合中移除set中的信号 block &a原创 2021-12-07 10:41:25 · 884 阅读 · 0 评论 -
进程信号----自定义处理方式
处理: 说白了就是打断进程当前操作,然后执行信号的处理函数,执行完毕后回到原来的主控流程继续运行。 处理方式: 默认处理方式:执行默认的处理方式 忽略处理方式:信号依然会注册只是处理方式变为空操作 自定义处理方式:自己定义信号处理函数,修改信号的处理函数指针 #include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<signal.h> void sigcb(int no)原创 2021-11-28 22:56:56 · 292 阅读 · 0 评论 -
进程信号---kill命令
进程信号: 原理:是一种中断机制,或者说是一种事件通知机制,在这里讲的是软件中断,通过信号通知进程发生了某个事件,打断进程当前的操作,去处理事件。 一个信号对应一个事件,并且信号必须能够被识别 Linux下信号种类: 使用kill -l命令进行查看,62种 1~31号:非可靠信号;34-64号:可靠信号 信号的生命周期:产生,注册,注销,处理 产生: 硬件产生: ctrl+c,ctrl+\,ctrl+z 软件产生: kill命令发送一个信号给进程;示例: kill -sigid pid kill杀死进程原创 2021-11-28 22:25:16 · 871 阅读 · 0 评论 -
进程间通信---共享内存
共享内存: 目的: 用于进程间的数据共享 原理: 开辟一块物理内存空间,各个进程将同一块物理内存空间映射到自己的虚拟地址空间中,通过虚拟地址进行访问,进而实现数据共享 共享内存是最快的进程间通信方式,因为通过虚拟地址空间映射后,直接通过虚拟地址访问物理内存,相较于其他方式少了两部数据拷贝操作。 操作流程: 1.创建或打开共享内存 int shmget(key_t key, size_t size, int shmflg); key:标识符—通过相同的标识符,多个进程可以打开同一块共享内存; size:要创建原创 2021-11-15 16:39:39 · 123 阅读 · 0 评论 -
进程间通信--命名管道
命名管道: 可以用于同一主机上任意进程间通信—管道缓冲区具有标识符 命名管道:mkfifo filename 创建一个管道文件 命名管道本质上依然是内核中的一块缓存区,但是命名管道有名字具有标识符,而这个标识符就是一个可见于文件系统的管道类型文件,多个进程可以通过打开同一个管道文件访问同一块内核中的缓冲区实现通信 代码操作:int mkfifo(char *path,int mode); 对管道的读写操作,仍然是IO操作 打开特性: 若以只读方式打开命名管道文件,则会阻塞,直到这个管道文件被以写的方式打开原创 2021-11-09 17:01:15 · 224 阅读 · 0 评论 -
系统调用接口---IO
*int open(const char pathname, int flags, mode_t mode); open(文件名,选项标志,权限) pathname:文件路径名 flags:标志位 必选其一:O_RDONLY ,O_WRONLY, O_RDWR 可选项: O_CREAT:如果文件不存在,则创建 O_EXCL:跟O_EXCL一起使用,如果文件已经存在报错返回。 O_TRUNC:打开文件时截断文件长度为0—清空内容 O_APPEND:将写入设置为追加写。 w+:O_RDWR| O_CREAT|原创 2021-11-04 21:27:02 · 82 阅读 · 0 评论 -
linux:进程概念
进程概念: 理解进程是什么? 进程:运行中的程序 时间片:cpu调度运行程序的时间段,时间片过后,就该切换调度下一个进程了 并发:一种轮询处理的方式 并行:同时运行 通过程序的运行描述,操作系统就可以调度哪个程序可以占用cpu去运行指令 要运行哪个程序,则操作系统找到对应程序的PCB,在pcb取出程序的运行所需信息,加载到cpu上,cpu就开始运行这个程序了 对于操作系统而言,进程就是一个程序运行的描述,通过这个描述,操作系统可以进行程序的调度运行管理 实际上对于操作系统而言,进程就是pcb 这个程序运行原创 2021-11-03 16:19:06 · 115 阅读 · 0 评论 -
匿名管道----实例
ps -ef | grep pipe ps -ef:将所有进程信息写入到标准输出 grep pipe:不断循环从标准输入读取数据进行字符串匹配过滤 shell进程中创建两个进程,一个进程运行ps,一个进程运行grep 要将ps进程的数据,交给grep进程只能通过进程间通信完成—匿名管道 流程: 创建管道 创建两个进程(不同进程,程序中体现为2个子进程,子进程通过父进程获得句柄),在各自进程中进行程序替换 在程序替换之前,ps进程应该标准输出重定向到管道写入端,grep进程应该标准输入重定向到管道读取端 父原创 2021-11-03 15:44:19 · 120 阅读 · 0 评论 -
模拟实现xshell(1)
流程 1.捕捉用户键盘输入 [ ls -a -l] 2.解析输入信息—得到命令名称,运行参数 [ls] [-a] [-l] 3.创建子进程,在子进程通过命令名称进行程序替换(让子进程运行命令) 4.进程等待,等待子进程退出,防止出现僵尸进程 #include<stdio.h> //printf原创 2021-11-02 22:16:06 · 289 阅读 · 0 评论 -
进程间通信--匿名管道
管道:ipc 特性:半双工通信----可以选择方向的单向通信 本质:系统内核中的一块缓存区(内核空间中开辟的一块内存) 通信原理:多个进程只要能够访问同一块内核中的缓冲区(管道)就能实现通信。 分类:匿名管道,命名管道 匿名管道:只能用于具有亲缘关系的进程间通信 命名管道:可以用于同一主机上任意进程间通信 匿名管道: 管道缓冲区没有标识符,无法被其他进程找到,因此只能通过子进程复制父进程的方式获取到管道的操作句柄,进行通信 代码操作: int pipe(int pipefd[2]); pipefd[0]原创 2021-11-02 17:39:58 · 264 阅读 · 0 评论